将数据附加到属性文件,注释消失&数据顺序发生了变化

时间:2013-07-02 05:38:42

标签: java properties-file

在将数据附加到属性文件时,现有注释会消失。数据的顺序正在改变。请建议如何避免它?

属性文件中的数据(在附加数据之前)和注释如下:

# Setting the following parameters 
# Set URL to test the scripts against
App.URL = https://www.gmail.com
# Enter username and password values for the above Test URL
App.Username = XXXX
App.Password = XXXX

我在上面的属性文件中添加了更多数据,如下所示:

 public void WritePropertiesFile(String key, String data) throws Exception
{       
    try 
    {
        loadProperties();  
        configProperty.setProperty(key, data);
        File file = new File("D:\\Helper.properties");
        FileOutputStream fileOut = new FileOutputStream(file);
        configProperty.store(fileOut, null);
        fileOut.close();
    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    }
}

将上述功能调用为:

help.WritePropertiesFile("appwrite1","write1");
help.WritePropertiesFile("appwrite2","write2");
help.WritePropertiesFile("appwrite3","write3");

数据添加成功,但先前输入的注释消失,数据顺序也发生变化,属性文件(追加数据后)显示如下

#Tue Jul 02 11:04:29 IST 2013
App.Password=XXXX
App.URL=https\://www.gmail.com
appwrite3=write3
appwrite2=write2
appwrite1=write1
App.Username=XXXX

我希望数据最后追加,不想更改订单,也不想删除以前输入的注释。如果可以实现我的要求,请告诉我?

3 个答案:

答案 0 :(得分:5)

我最近遇到了同样的问题,并在StackOverflow上找到了以下答案:https://stackoverflow.com/a/565996/1990089。它建议使用Apache Commons Configuration API来处理属性文件,这样可以保留注释和空格。但是我自己也没试过。

答案 1 :(得分:3)

保留属性文件的注释并不简单。 java.util.Properties上没有方法来处理注释。读取文件时忽略注释。因为当我们执行properties.load时只加载键值对,因此当您将其保存回来时,注释将丢失。检查下面的链接,有一个解决方案可以实现您的需求,但不是优雅的方式:

http://www.dreamincode.net/forums/topic/53734-java-code-to-modify-properties-file-and-preserve-comments/

答案 2 :(得分:0)

如果您不想从属性文件中删除您的内容。只需从文件中读取并替换字符串即可。

    String file="D:\\path of your file\abc.properties";     
    Path path = Paths.get(file);
    Charset charset = StandardCharsets.UTF_8;

    String content = new String(Files.readAllBytes(path), charset);
    content = content.replaceAll("name=anything", "name=anything1");
    Files.write(path, content.getBytes(charset));

上述代码不会删除文件中的内容。它只是替换文件中的部分内容。