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身份运行,否则可能不应该这样。

10-05 23:52