gpt4 book ai didi

java - 未找到添加到 .jar 的属性

转载 作者:行者123 更新时间:2023-12-01 15:24:41 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

package testapp;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Test {

private static final Logger logger = Logger.getLogger(Test.class.getName());

public static void main(String[] args) {

Properties properties = new Properties();
try {
properties.load(new FileInputStream("testapp/infor.properties"));
System.out.println("" + properties.getProperty("a"));
} catch (IOException e) {
logger.log(Level.SEVERE, "", e);
}

}

}

您位于某个目录 PROJECT_ROOT 中。现在,在这个目录中,您有上面编译的类(在目录 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。

关于java - 未找到添加到 .jar 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10336486/

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