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

Java JAR文件找不到嵌入资源--相对路径有问题吗?,java,jar,embedded-resource,Java,Jar,Embedded Resource,我有一个JAR文件,是我通过这个命令手动创建的(行被包装以便于阅读): 清单如下所示: 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

我有一个JAR文件,是我通过这个命令手动创建的(行被包装以便于阅读):

清单如下所示:

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/
中:

packapplication.client;
字符串typeName=“type2”//可能是类型1或类型3
InputStream=modelViewer.modelEnv.openFile(typeName+“.txt”);
// ===============================================================
包应用程序启动;
公共InputStream openFile(字符串名称){
文件f;
FileInputStream为空;
String dir=System.getProperty(“user.dir”);
f=新文件(目录,名称);
is=新文件输入流(f);
回报是;
}

我尝试使用
/client/
目录中的
.txt
资源文件创建JAR,但没有成功。我也尝试过改变代码中的路径,正如对类似问题的其他回答所建议的那样。我猜这是使用相对路径的某种问题。如何使这些文件在JAR中正确引用,以便应用程序可以独立运行?

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


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

类型名的值是多少?为了更快地获得更好的帮助,请发布一个。
typeName
只是一个与
.txt
文件名--
type1
type2
type3
之一对应的字符串。抱歉,我认为这是不言而喻的。“我认为这是不言而喻的。”SSCE是“不言而喻的”。你的在哪里?@RC这很有效。我想我已经试过了,但结果证明我当时没有正确创建JAR文件。如果不知道openFile()的作用,很难解释它的对错。当我最终了解了
openFile()
方法的实现后,这一点就很明显了——感谢您为我指明了这个方向!
[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