将数据附加到属性文件,注释消失并更改数据顺序[重复]
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));
以上代码不会从您的文件中删除内容。它只是替换文件中的部分内容。
【讨论】:
以上是关于将数据附加到属性文件,注释消失并更改数据顺序[重复]的主要内容,如果未能解决你的问题,请参考以下文章