属性文件中的更改不会保存在 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 文件