从命令行执行jar时,属性文件读取旧数据

时间:2015-12-07 11:02:14

标签: java properties-file read-write

我创建了一个java应用程序,它从属性文件(resources-> settings - > 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);}

1 个答案:

答案 0 :(得分:2)

您正在阅读的文件是与您的应用程序一起打包的文件,而不是您要保存到的文件。

此代码getClass().getClassLoader().getResourceAsStream(propFileName))为您提供类路径中的资源。 您需要以与保存属性相同的方式创建文件,然后从该文件中获取InputStream。

如果要在原始属性文件中使用默认值,则可能需要在"保存文件中检查空值"如果它没有数据,则从您的默认资源文件中读取。