gpt4 book ai didi

java - jar文件名形式java代码

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:39:35 24 4
gpt4 key购买 nike

我想从我的 java 代码中确定 jar 文件名。我在谷歌中找到了很多解决方案,但没有任何效果。只是为了看看我在这里尝试的是一个 stackoverflow 论坛,其中发布了一堆解决方案:stackoverflow

我有 Mac OS X 10.6.5。
当我输入 java -version 时,我得到了这个结果:
java version "1.6.0_22"<br/>
Java(TM) SE Runtime Environment (build 1.6.0_22-b04-307-10M3261)<br/>
Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03-307, mixed mode)

感谢您的帮助。


编辑:我编辑我的帖子以回答评论。
当我想要 System.out.println 路径时,一些解决方案会给我“空”值,而当我想创建文件实例时也会失败。
当我询问路径时,其他解决方案不会提供类似 file:/..... 的信息, 而不是他们给出类似 rsch:/ 的东西或类似的东西,这个我不太清楚,但它是一个 4 个字符的简单单词。


编辑 2:我从控制台运行一个可执行 jar。我希望在执行的 jar 文件中的类中有这个 jar 文件名。


编辑 3:
4 个字符的单词是:rsrc:./

编码我是如何得到这个的:

    File file = null;
try {
System.out.println(MyClass.class.getProtectionDomain().getCodeSource().getLocation().toURI());
} catch (URISyntaxException e) {
e.printStackTrace();
}

编辑 4:我也试过这段代码:

package core;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class MyClass {

public String getText(String key) {
String path = "" + MyClass.class.getResource("../any.properties");
File file = new File((path).substring(5, path.length()));

Properties props = readProps(file);

return props.getProperty(key);
}

private Properties readProps(File file) {
Properties props = new Properties();
InputStream in = null;

try {
in = new FileInputStream(file);
props.load(in);
in.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return props;
}

public static void main(String[] args) {
System.out.println(new MyClass().getText("anything"));
}

}

结果是:

Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1937)
at core.PropHandler.getText(MyClass.java:14)
at core.PropHandler.main(MyClass.java:39)
... 5 more

此代码在 eclipse 中完美运行,但是当我创建可运行的 jar 文件时,我认为您可以看到问题。

最佳答案

这是你想要的吗? http://www.uofr.net/~greg/java/get-resource-listing.html


jcomeau@intrepid:/tmp$ cat test.java; javac test.java; jar cvf test.jar test.class; java -cp test.jar test
public class test {
public static void main(String[] args) {
System.out.println(test.class.getResource("test.class"));
}
}
adding: META-INF/ (in=0) (out=0) (stored 0%)
adding: META-INF/MANIFEST.MF (in=56) (out=56) (stored 0%)
adding: test.class (in=845) (out=515) (deflated 39%)
Total:
------
(in = 885) (out = 883) (deflated 0%)
jar:file:/tmp/test.jar!/test.class

为了访问无论是否存在 jar 文件都有效的资源,我总是使用 classname.class.getResourceAsStream()。但是链接的文档显示了如何使用 JarFile() 来达到相同的目的。

关于java - jar文件名形式java代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4294522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com