在将数据附加到属性文件时,现有注释会消失。数据的顺序正在改变。请建议如何避免它?
属性文件中的数据(在附加数据之前)和注释如下:
# 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
我希望数据最后追加,不想更改订单,也不想删除以前输入的注释。如果可以实现我的要求,请告诉我?
答案 0 :(得分:5)
我最近遇到了同样的问题,并在StackOverflow上找到了以下答案:https://stackoverflow.com/a/565996/1990089。它建议使用Apache Commons Configuration API来处理属性文件,这样可以保留注释和空格。但是我自己也没试过。
答案 1 :(得分:3)
保留属性文件的注释并不简单。 java.util.Properties上没有方法来处理注释。读取文件时忽略注释。因为当我们执行properties.load时只加载键值对,因此当您将其保存回来时,注释将丢失。检查下面的链接,有一个解决方案可以实现您的需求,但不是优雅的方式:
答案 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));
上述代码不会删除文件中的内容。它只是替换文件中的部分内容。