属性文件中的更改不会保存在JAR文件

时间:2016-09-26 12:37:10

标签: java jar properties-file

我的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但我不明白这个问题以及我必须采取哪些措施来解决这个问题......

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您不应该向JAR文件写任何内容。从技术上讲,JAR下的资源是只读的。您无法编写/修改JAR中的任何文件。

  

我的Java程序中有一个存储多个值的属性文件。在设置窗口中,用户可以编辑这些值并保存下次运行程序时的修改。

您可以使用数据库/缓存/平面文件来存储这些值,并在运行时从中读取这些值,而不是将这些修改后的值保存在属性文件中。