从命令行执行 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" 中的空值,如果它没有数据,则从您的默认资源文件中读取。