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

Posted

技术标签:

【中文标题】属性文件中的更改不会保存在 JAR 文件中【英文标题】:Changes in the properties file are not saved inside the JAR file 【发布时间】:2017-02-03 19:25:07 【问题描述】:

我的 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,但我不明白这个问题以及我必须做些什么来解决这个问题......

感谢您的帮助。

【问题讨论】:

jar 采用相对路径,而在 IDE 中使用绝对路径,这就是您找不到路径的原因 尝试打印路径 new File(AppProperties.class.getResource(preferencesSourcePath).getPath()) 也从你运行 jars 的地方添加 问题是资源不是文件,根本无法写入,更不用说你正在使用的API了。 【参考方案1】:

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

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

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

【讨论】:

好的。所以如果我想将修改保存在属性文件中,我必须将属性文件存储在 JAR 文件之外?

以上是关于属性文件中的更改不会保存在 JAR 文件中的主要内容,如果未能解决你的问题,请参考以下文章

OpenPyXL 不会保存到带有替换更改的新 Excel 文件

如何在 Python 中使用 BeautifulSoup 保存对 HTML 文件所做的更改?

Spring Boot 2 - 更改 Jar 名称

如何使用 jar 文件中的 Liquibase 更改日志

如何在 Java 中修改 HTML 文件并保存更改

文件访问权限:更改用户ID