从命令行执行 jar 时属性文件读取旧数据
Properties file reads old data when jar is executed from command line
我创建了一个 java 应用程序,它从属性文件(资源 -> 设置 -> config.properties)复制数据并使用它。在某一时刻,属性文件值被更新,代码必须使用新值。从 Netbeans 执行时代码工作正常。但是当我在构建后从 dist 文件夹执行 ti 时,即使我更改了属性文件,每次都会加载旧值。属性文件已更新,但使用的值仍然是旧值。
写入属性文件的代码
File f = new File(System.getProperty("user.dir") + "\resources\settings\config.properties");
try (OutputStream output = new FileOutputStream(f)) {
Properties prop = new Properties();
// set the properties value
prop.setProperty("xml", xmlFileTextBox.getText());
// save properties to project root folder.
prop.store(output, null);
} catch (IOException exception) {
exception.printStackTrace();
}
读取属性文件中值的代码
try {
Properties prop = new Properties();
String propFileName = "settings/config.properties";
try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream(propFileName)) {
if (inputStream != null) {
prop.load(inputStream);
xmlFileTextBox.setText(prop.getProperty("xml"));
}
inputStream.close();
}
} catch (Exception e) {
System.out.println("Exception: " + e);}
您正在读取的文件是与您的应用程序打包在一起的文件,而不是您要保存到的文件。
此代码 getClass().getClassLoader().getResourceAsStream(propFileName))
为您提供来自类路径的资源。
您需要以与保存属性时相同的方式创建文件,然后从该文件中获取 InputStream。
如果您想在原始属性文件中使用默认值,您可能需要检查 "save file" 中的空值,如果它没有数据,则从您的默认资源文件中读取。
我创建了一个 java 应用程序,它从属性文件(资源 -> 设置 -> config.properties)复制数据并使用它。在某一时刻,属性文件值被更新,代码必须使用新值。从 Netbeans 执行时代码工作正常。但是当我在构建后从 dist 文件夹执行 ti 时,即使我更改了属性文件,每次都会加载旧值。属性文件已更新,但使用的值仍然是旧值。
写入属性文件的代码
File f = new File(System.getProperty("user.dir") + "\resources\settings\config.properties");
try (OutputStream output = new FileOutputStream(f)) {
Properties prop = new Properties();
// set the properties value
prop.setProperty("xml", xmlFileTextBox.getText());
// save properties to project root folder.
prop.store(output, null);
} catch (IOException exception) {
exception.printStackTrace();
}
读取属性文件中值的代码
try {
Properties prop = new Properties();
String propFileName = "settings/config.properties";
try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream(propFileName)) {
if (inputStream != null) {
prop.load(inputStream);
xmlFileTextBox.setText(prop.getProperty("xml"));
}
inputStream.close();
}
} catch (Exception e) {
System.out.println("Exception: " + e);}
您正在读取的文件是与您的应用程序打包在一起的文件,而不是您要保存到的文件。
此代码 getClass().getClassLoader().getResourceAsStream(propFileName))
为您提供来自类路径的资源。
您需要以与保存属性时相同的方式创建文件,然后从该文件中获取 InputStream。
如果您想在原始属性文件中使用默认值,您可能需要检查 "save file" 中的空值,如果它没有数据,则从您的默认资源文件中读取。