1

我得到一个personHashMap.ser包含 HashMap 的文件。这是我如何创建它的代码:

String file_path = ("//releasearea/ToolReleaseArea/user/personHashMap.ser");
public void createFile(Map<String, String> newContent) {
    try{
        File file = new File(file_path);

        FileOutputStream fos=new FileOutputStream(file);
        ObjectOutputStream oos=new ObjectOutputStream(fos);

        oos.writeObject(newContent);
        oos.flush();
        oos.close();
        fos.close();

    }catch (Exception e){
        System.err.println("Error in FileWrite: " + e.getMessage());
    }

}

现在我想,当程序运行时,所有五分钟personHashMap.ser 都只用改变的内容更新文件。所以我调用的方法:

public void updateFile(Map<String, String> newContent) {
    Map<String, String> oldLdapContent = readFile();
    if(!oldLdapContent.equals(ldapContent)){ // they arent the same, 
                                             // so i must update the file

    }   

}

但现在我不知道如何实现这一点。
只更新新内容对性能更好还是应该清理整个文件并再次插入新列表?

希望你能帮我..

编辑:

HashMap 包括 ie street=Example Street
但现在,新街叫New Example Street。现在我必须更新文件中的 HashMap。所以我不能只是追加新内容......

4

3 回答 3

2

首先HashMap不是一个合适的选择。它是为内存使用而设计的,而不是序列化(当然它可以以标准方式序列化)。但如果它只有 2kb,那么继续写整个东西而不是更新的数据。

其次,您似乎过于担心这种相当微不足道的方法的性能(对于 2kb,写入只需几毫秒)。我会更担心一致性和并发性问题。我建议您考虑使用轻量级数据库,例如 JavaDB 或 h2。

于 2012-10-08T09:44:25.190 回答
0

您可以循环调用updateFile方法,然后调用sleep 5 分钟(5*60*1000 毫秒)。

Thread.Sleep(300000); // sleep for 5 minutes

要附加到您已经存在的文件,您可以使用:

FileOutputStream fooStream = new FileOutputStream(file, true);
于 2012-10-08T09:15:33.850 回答
0

使用构造函数FileOutputStream(File file, boolean append),设置boolean appendtrue. 它将在现有文件中附加文本。

于 2012-10-08T09:27:15.197 回答