我的Java程序中有一个存储多个值的属性文件。在设置窗口中,用户可以编辑这些值并保存下次运行程序时的修改。
以下是从属性文件加载属性的代码:
public class AppProperties {
private final static AppProperties appProperties = new AppProperties();
private static Properties properties;
private final static String preferencesSourcePath = "/res/pref/Properties.properties";
private AppProperties() {
properties = new Properties();
try {
properties.load(getClass().getResourceAsStream(preferencesSourcePath));
} catch (IOException e) {
e.printStackTrace();
}
}
这里是在属性文件中保存属性的方法(在同一个类中):
public static void saveAppPropertiesFile() {
try {
OutputStream outputStream = new FileOutputStream(new File(AppProperties.class.getResource(preferencesSourcePath).getPath()));
properties.store(outputStream, null);
} catch (IOException e) {
e.printStackTrace();
}
}
}
我已经尝试过这个功能,当我在我的IDE中时它做得很好但是当我运行JAR文件时它不起作用。实际上,它适用于当前会话,但它不会保存在JAR文件中。
在控制台中,它说:
java.io.FileNotFoundException: file:\C:\Users\HP\HEIG\EcoSimSOO\out\artifacts\EcoSimSOO_jar\EcoSimSOO.jar!\res\pref\Properties.properties (La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte)
at ...
at res.pref.AppProperties.saveAppPropertiesFile(AppProperties.java:31)
这是我尝试这样做的地方:
AppProperties.class.getResource(preferencesSourcePath)
我已阅读this post但我不明白这个问题以及我必须采取哪些措施来解决这个问题......
感谢您的帮助。
答案 0 :(得分:2)
您不应该向JAR文件写任何内容。从技术上讲,JAR下的资源是只读的。您无法编写/修改JAR中的任何文件。
我的Java程序中有一个存储多个值的属性文件。在设置窗口中,用户可以编辑这些值并保存下次运行程序时的修改。
您可以使用数据库/缓存/平面文件来存储这些值,并在运行时从中读取这些值,而不是将这些修改后的值保存在属性文件中。