7

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

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

# 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

我希望数据最后附加,不想更改顺序,也不想删除之前输入的评论。请让我知道是否可以实现我的要求?

4

3 回答 3

10

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

于 2013-07-02T06:14:52.330 回答
3

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

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

于 2013-07-02T05:45:39.423 回答
1

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

    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));

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

于 2017-06-16T07:13:56.637 回答