将数据附加到属性文件,注释消失并更改数据顺序[重复]

Posted

技术标签:

【中文标题】将数据附加到属性文件,注释消失并更改数据顺序[重复]【英文标题】:Appending data to properties file, comments disappear & order of data changed [duplicate] 【发布时间】:2013-06-29 09:05:48 【问题描述】:

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

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

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

数据添加成功,但是之前输入的cmets消失了,数据的顺序也改变了,属性文件(追加数据后)显示如下

#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

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

【问题讨论】:

1) 为了尽快获得更好的帮助,请发帖 SSCCE。 2) 对代码块使用一致且符合逻辑的缩进。代码的缩进是为了帮助人们理解程序流程。 【参考方案1】:

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

【讨论】:

它就像魅力一样。它恢复了所有的 cmets 和订单。非常感谢:)【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

以上是关于将数据附加到属性文件,注释消失并更改数据顺序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将更改保存到Forge Autodesk Viewer

Gradle 删除注释并重新格式化属性文件

Gradle删除注释并重新格式化属性文件

将火花数据框附加到具有不同列顺序的配置单元表

如何将新数据附加到属性文件中的现有数据?

X-Editable:将事件附加到数据更改