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

Posted

技术标签:

【中文标题】如何将新数据附加到属性文件中的现有数据?【英文标题】:How to append new data to existing data in properties file? 【发布时间】:2013-06-28 09:24:31 【问题描述】:

我正在使用以下代码将数据写入属性文件

public void WritePropertiesFile(String key, String data)

Properties configProperty = new Properties();
configProperty.setProperty(key, data);
File file = new File("D:\\Helper.properties");
FileOutputStream fileOut = new FileOutputStream(file,true);
configProperty.store(fileOut, "sample properties");
fileOut.close();


I am calling the above method 3 times as follows:
help.WritePropertiesFile("appwrite1","write1");
help.WritePropertiesFile("appwrite2","write2");
help.WritePropertiesFile("appwrite3","write3");

但是,Helper.properties 文件中的数据显示如下:

#sample properties
#Mon Jul 01 15:01:45 IST 2013
appwrite1=write1
#sample properties
#Mon Jul 01 15:01:45 IST 2013
appwrite2=write2
appwrite1=write1
#sample properties
#Mon Jul 01 15:01:45 IST 2013
appwrite3=write3
appwrite2=write2
appwrite1=write1

我希望数据附加到现有数据,不希望重复数据,如下:

appwrite3=write3
appwrite2=write2
appwrite1=write1

请建议怎么做?

【问题讨论】:

【参考方案1】:

我知道这个问题已经得到解答,但仅供将来参考,代码应该看起来更像这样:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

class WritePropertiesFile 

    public void WritePropertiesFile(String key, String data) 
        FileOutputStream fileOut = null;
        FileInputStream fileIn = null;
        try 
            Properties configProperty = new Properties();

            File file = new File("D:\\Helper.properties");
            fileIn = new FileInputStream(file);
            configProperty.load(fileIn);
            configProperty.setProperty(key, data);
            fileOut = new FileOutputStream(file);
            configProperty.store(fileOut, "sample properties");

         catch (Exception ex) 
            Logger.getLogger(WritePropertiesFile.class.getName()).log(Level.SEVERE, null, ex);
         finally 

            try 
                fileOut.close();
             catch (IOException ex) 
                Logger.getLogger(WritePropertiesFile.class.getName()).log(Level.SEVERE, null, ex);
            
        
    

    public static void main(String[] args) 
        WritePropertiesFile help = new WritePropertiesFile();
        help.WritePropertiesFile("appwrite1", "write1");
        help.WritePropertiesFile("appwrite2", "write2");
        help.WritePropertiesFile("appwrite3", "write3");
    

【讨论】:

这里要提到的重要一点是,您必须在使用 configProperty.load() 加载属性后创建 FileOutputStream。因为否则从您说 new FileOutputStream(file) 开始,文件将为空。【参考方案2】:

只是不要以附加模式打开文件。

您从文件中读取现有属性并再次写入它们。如果你追加到文件中,Properties 对象的所有内容都将被追加,因为这是你要求的。

只需替换:

FileOutputStream fileOut = new FileOutputStream(file,true);

与:

FileOutputStream fileOut = new FileOutputStream(file);

旁注:您应该在finally 块中.close() 输出流。

【讨论】:

您好,谢谢您的回答...我尝试了您提到的代码,它工作正常。但是当我从其他类文件访问该方法时遇到问题。我从一个类文件中调用上述函数,如下所示:help.WritePropertiesFile("appwrite1","write1"); help.WritePropertiesFile("appwrite2","write2"); help.WritePropertiesFile("appwrite3","write3"); 这完全是另一个问题;)您没有显示足够的代码来帮助解决这个问题。 从我调用的其他类文件如下:help.WritePropertiesFile("appwrite4","write4"); help.WritePropertiesFile("appwrite5","write5"); help.WritePropertiesFile("appwrite6","write6");输出显示为 appwrite4 = write4 appwrite5 = write5 appwrite6 = write6 它正在删除从 class1 写入的数据并将其替换为 class2..._请告诉我如何存储从两个类文件写入的数据? 使用Properties.load()从初始文件加载。 我应该在 WritePropertiesFile(String key, String data) 方法中使用 Properties.load() 吗?

以上是关于如何将新数据附加到属性文件中的现有数据?的主要内容,如果未能解决你的问题,请参考以下文章

将新数据附加到 R 中的现有数据框 (RDS)

有没有办法在不使用 XDocument 的情况下将新的 xml 数据附加到 xml 文件中的现有 xml?

如何使用 pymongo 将新的值数组附加到 mongodb 中的现有数组文档?

如何使用nodejs在对话流履行中将数据附加到firebase?

在 UDF 之后将新列附加到现有 PySpark 数据帧

将新属性添加到另一个数组中的现有对象数组