java - 属性文件在 jar 内不起作用

标签 java properties

当我尝试使独立 Java 应用程序成为可运行的 jar 时,我遇到属性文件问题。 我有 2 个属性文件,具体取决于其运行属性文件被初始化的机器。 在 eclipse 里面它工作得很好。我正在使用:

Properties configProps = new Properties();
....
if(machine1)
....
configProps.load(Config.class.getResourceAsStream("machine1.properties"));
else
configProps.load(Config.class.getResourceAsStream("machine2.properties"));

它与 Config.java 一样工作,并且属性位于同一个包中。 最重要的是,我在项目的根目录中有 log4j 属性。 当我制作 Jar 时,这也不起作用。

如何处理当前的情况。我知道将属性文件放在 jar 之外是个好主意。 我该如何实现这一目标。

请帮忙。

最佳答案

只有当您需要写入该属性文件(用于配置)时,将属性文件放在 jar 之外才是一个好主意。鉴于您的命名,我认为它是用于配置的。

对于只读,如果属性文件正确打包在 Jar 中,您的方法就很好。是吗?您是否已经使用 jar tf MyJar.jar 达到了内容的顶峰?它是否在正确的路径中显示您的属性文件?

在哪里存储配置文件是一个更广泛的问题。这是一篇很好的文章,研究了它的几个方面(即放置它的位置):What is the proper way to store app's conf data in Java?

在我看来,您想选择一个位置(请参阅上面的文章)。完成此操作后,第一次运行应用程序时,您应该像您尝试执行的那样从 Jar 文件加载默认属性,然后立即将它们保存到您选择的位置。然后,然后,从该位置读取并写入该位置。您将需要使用 FileInputStream/FileOutputStream。

关于java - 属性文件在 jar 内不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3874203/

相关文章:

java - 连接到 Notes 中的 LDAP 服务器的 SSLHandshakeException

Java Selenium 通过命令提示符 CMD Windows 运行,无需 IDE

java - Java 中缺少属性语法

c# - 应用程序完成后,为什么运行时值出现在设计模式中?

java - 用于管理用于翻译的 java lang.properties 文件的软件

java - Oozie 抛出 java.lang.ClassNotFoundException

java - Intellij Idea中如何指定多模块项目的编译顺序?

Java:如何创建一个可以在包内子类化的公共(public)类,同时防止外人继承?

c# - c#中的实例初始化策略

swift - 可获取、可设置和存储属性、计算属性之间有什么联系