gpt4 book ai didi

java - JAR 文件找不到嵌入资源——相对路径有问题吗?

转载 作者:行者123 更新时间:2023-11-30 04:18:58 29 4
gpt4 key购买 nike

我有一个通过此命令手动创建的 JAR 文件(换行以便于阅读):

jar -cfm app_standalone.jar manifest.txt 
application/client/*.class
application/data/*.class
application/startup/*.class
*.txt

list 如下所示:

Main-Class: application.startup.StartFrame

我在 /application/ 之外的目录中运行此命令。生成的 JAR 的目录结构如下所示:

[ROOT_DIR_OF_JAR]/type1.txt
[ROOT_DIR_OF_JAR]/type2.txt
[ROOT_DIR_OF_JAR]/type3.txt
[ROOT_DIR_OF_JAR]/application
[ROOT_DIR_OF_JAR]/application/client/example.class
[ROOT_DIR_OF_JAR]/application/data/another.class
[ROOT_DIR_OF_JAR]/application/startup/run_me.class

当我运行 JAR 文件时,它执行得很好,但它与 .txt 位于同一目录中。文件,它显然正在引用这些文件。指向那些 .txt 的代码文件位于 /application/client/ :

package application.client;
String typeName = "type2"; // could be type1 or type3
InputStream is = modelViewer.modelEnv.openFile(typeName + ".txt");
// ===============================================================
package application.startup;
public InputStream openFile(String name) {
File f;
FileInputStream is = null;
String dir = System.getProperty("user.dir");
f = new File(dir, name);
is = new FileInputStream(f);
return is;
}

我尝试使用 .txt 创建 JAR /client/中的“资源”文件目录,但没有成功。我还尝试更改代码中的路径,正如类似问题的其他答案所建议的那样。我猜测这是使用相对路径的某种问题。我该怎么做才能使这些文件在 JAR 中正确引用,以便应用程序可以独立运行?

最佳答案

该方法不会从类路径加载文件,而是从文件系统中的当前目录加载文件。这就是问题所在。

要从类路径加载资源,必须使用Class.getResourceAsStream()(或ClassLoader.getResourceAsStream())。

关于java - JAR 文件找不到嵌入资源——相对路径有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17607685/

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