Java 找不到添加到.jar的属性

Java 找不到添加到.jar的属性,java,jar,Java,Jar,我有一个简单的桌面应用程序。该应用程序有一个名为MyApp.jar的其他应用程序的.jar,在这个jar中有一个带有一个键(infor.properties)的属性文件。应用程序必须生成自己的MyApp.jar,其中属性文件的键是inputText中的字符串,因此我必须更改属性文件。我的问题是,当我生成新的.jar时,这个jar找不到属性文件。我使用它来获取infor.properties的内容: InputStream in = this.getClass().getClassLoader()

我有一个简单的桌面应用程序。该应用程序有一个名为MyApp.jar的其他应用程序的.jar,在这个jar中有一个带有一个键(infor.properties)的属性文件。应用程序必须生成自己的MyApp.jar,其中属性文件的键是inputText中的字符串,因此我必须更改属性文件。我的问题是,当我生成新的.jar时,这个jar找不到属性文件。我使用它来获取infor.properties的内容:

InputStream in = this.getClass().getClassLoader().getResourceAsStream("infor.properties");
Properties prop = new Properties();
prop.load(in);
in.close();

我使用ZipFile和ZipOutStream将每个文件复制到新的.jar,并添加一个新的。文件的新结构new.jar是正确的,但是当我运行新jar时,找不到文件infor.properties。有人知道为什么吗?

这取决于文件在jar中的位置以及如何指定类路径。不幸的是,您没有向我们提供有关您的结构等的更多信息。因此,我创建了此示例,希望您能够将其应用于您的项目:

假设您在包
testapp
中有类
Test
(类的全名在那里
testapp.Test
):

您在某个目录项目的根目录下。现在在这个目录中有了上面编译的类(在目录testapp中,因为类的全名是
testapp.Test
)。您的结构如下所示:

PROJECT_ROOT
  testapp
    Test.class
    infor.properties
请注意,该类已经编译(您可能知道如何正确编译?)。当您的工作目录为PROJECT_ROOT时,您可以运行:

 jar -vcf myjar.jar *
它将创建一个名为
myjar.jar
的jar。现在可以使用以下命令运行jar文件

java -cp myjar.jar testapp.Test
它简单地说(使用
-cp myjar.jar
)类路径是myjar.jar(对于JVM,是类似jar的目录)


正如您在Test.java中看到的,您有
“testapp/infor.properties”
。必须根据使用的类路径指定属性文件的路径。类路径是myjar.jar内容的根。因此testapp/infor.properties。

infor.properties真的在jar中吗?托盘将其重命名为zip并进行查看。如何生成jar?你使用IDE吗?或者您是否使用
jar
实用程序?请查看我的答案,如果您需要更多说明,请告诉我。谢谢
java -cp myjar.jar testapp.Test