我得到一个带有HashMap的文件personHashMap.ser
。以下是我创建它的代码:
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包括street=Example Street
。
但现在,这条新街道叫New Example Street
。现在我必须更新文件中的HashMap。所以我不能只追加新的内容......
答案 0 :(得分:2)
首先HashMap
不是一个合适的选择。它设计用于内存使用,而不是序列化(当然它可以以标准方式序列化)。但如果它只有2kb,那么继续写下整个事情而不是更新的数据。
其次,你似乎过于担心这个相当简单的方法的性能(对于2kb,写入将花费仅几毫秒)。我会更担心一致性和并发性问题。我建议你研究使用JavaDB或h2等轻量级数据库。
答案 1 :(得分:0)
您可以在循环中调用 updateFile 方法,然后调用 sleep 5分钟(5 * 60 * 1000 ms)。
Thread.Sleep(300000); // sleep for 5 minutes
要附加到现有文件,您可以使用:
FileOutputStream fooStream = new FileOutputStream(file, true);
答案 2 :(得分:0)
使用构造函数FileOutputStream(File file, boolean append)
,将boolean append
设置为true
。它会将文本附加到现有文件中。