【问题标题】: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

请建议怎么做?

【问题讨论】:

    标签: java properties-file


    【解决方案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() 吗?
    猜你喜欢
    • 2017-06-24
    • 1970-01-01
    • 2020-05-02
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多