FileHashMap<int, String> myMap = new FileHashMap<int, String>("/myFile");
myMap.put(1, "First");
myMap.put(2, "Second");
myMap.save();
myMap.close();
根据我的理解,此代码会将Hashmap文件保存到磁盘上。但是当我再次创建FileHashMap的对象时,如下所示:
FileHashMap<int, String> myMap = new FileHashMap<int, String>("/myFile");
if(myMap.containsKey(1){
System.out.println("Yes");
}
else{
System.out.println("No");
}
这给出的输出为“否”。我想重用文件,重用Hashmap ...我该怎么做。有人可以解释吗?
最佳答案
这是您的问题:API令人困惑。它说“ [a] FileHashMap默认是持久的”,但是零和一参数构造函数(您正在使用的用于指定文件名的一个参数是一个参数)会创建一个新的瞬态FileHashMap
-是,关闭FileHashMap
后将删除该文件。具有两个参数的构造函数采用文件名和int
选项标志,但是“持久”没有特定的选项,因此您只需要确保该标志不是“瞬态的”即可(确切地说是flags & FileHashMap.TRANSIENT == 0
)。
为了保存并打开文件,请将0
作为标志传递给构造函数(除非需要其他选项,请阅读文档),如下所示:
new FileHashMap<Integer, String>(fileName, 0);
请注意,如注释所述,通用参数需要为
Integer
而不是int
。还要注意,您可能希望文件路径不是“ / myFile”,因为这很可能会给您一个权限被拒绝的错误,除非您以root身份运行,否则可能不应该这样。