在我的Java项目中,我在文件夹src / properties中有一些属性文件。在eclipse加载中运行应用程序并使用以下代码保存文件时没有问题:
// create and load default properties
Properties defaultProps = new Properties();
File file = new File("src/properties/defaultProperties");
if (!file.exists()){
// Create new properties file
...
FileOutputStream out = new FileOutputStream("defaultProperties");
defaultProps.store(out, "---No Comment---");
out.close();
} else {
// Load existing properties file
FileInputStream in = new FileInputStream(file);
defaultProps.load(in);
in.close();
}
然而,当我使用eclipse创建一个Runnable Jar文件时,属性无法正确加载。保存文件时也会发生同样的情况。我读了一些关于:
的文章InputStream is = getClass().getResourceAsStream(path);
但在这种情况下,如果文件存在,如何检查输入流?如何以正确的方式执行此I / O以使其在可执行的Jar文件中工作?
答案 0 :(得分:3)
而是使用java.util.prefs.Preferences
。它与java.util.Properties
类似,区别在于它不存储在属性文件中,而是存储在特定于平台的配置管理中。例如,在Windows机器上,这是注册表。
答案 1 :(得分:0)
getClass().getResourceAsStream(path);
是正确的方法。您的属性文件需要打包在jar文件中,并且路径(如上所用)应与 jar文件中的属性文件路径匹配。
请注意,您不会写入此内容。如果你正在打包一个罐子,那么(就所有意图和目的而言)都是不可变的。
答案 2 :(得分:0)
来自ClassLoader的javadoc
getResourceAsStream返回
用于读取资源的输入流,如果找不到资源,则为null
答案 3 :(得分:0)
不要尝试将资源写回Jar文件。档案通常由JVM锁定。
而是将新选项序列化到本地文件系统上的某个位置(有许多选项可用于实现此目的)并在默认为内部属性之前检查该更改的文件。