Java Hashmap,其中键是文件,值是模型

Java Hashmap,其中键是文件,值是模型,java,hashmap,java-io,Java,Hashmap,Java Io,我正在做一个项目,在这个项目中,我有一个hashmap,其中键是JavaIO库中的文件对象,还有一个自定义模型对象,称为DrawingModel,作为hashmap中的值。当我更改模型时,我需要保存文件。当我经历以下一系列事件时: 我打开一个文件 我做了一些改变 我保存该文件(文件->保存) 我退出文件 然后我打开同一个文件 但是,它没有打开 我的问题是,如果我更改了文件(通过保存),是否需要从Hashmap中删除该键值对并添加新的键值对?使值相同,但键被更新 非常感谢您的时间和帮助 真诚地,

我正在做一个项目,在这个项目中,我有一个hashmap,其中键是JavaIO库中的文件对象,还有一个自定义模型对象,称为DrawingModel,作为hashmap中的值。当我更改模型时,我需要保存文件。当我经历以下一系列事件时:

  • 我打开一个文件
  • 我做了一些改变
  • 我保存该文件(文件->保存)
  • 我退出文件
  • 然后我打开同一个文件
  • 但是,它没有打开 我的问题是,如果我更改了文件(通过保存),是否需要从Hashmap中删除该键值对并添加新的键值对?使值相同,但键被更新

    非常感谢您的时间和帮助

    真诚地,
    nc5

    文件对象只不过是实际文件路径的包装。它不会以任何方式锁定您的文件


    锁定是由某些仍然打开的流引起的。我打赌您在保存到文件后不会关闭输出流。

    是。如果您按逻辑思考,则您的密钥已更改。一旦它被更改,您将无法再使用它定位您的数据。您应该在地图中插入(新键、值)对

    始终
    关闭()
    打开的
    文件
    否则该文件将不会更新。关闭
    连接和通道流也将更好
    确保您已关闭文件流(最上面的一个)。也就是说,如果您打开了多条流,那么请确保最顶端的流已关闭。否则,文件将被操作系统锁定。

    我建议您将文件名作为密钥,而不是文件对象,并通过另一种逻辑处理文件编辑/更新内容文件对象作为密钥没有多大意义

    谢谢!我想可能是这样,但我不是100%确定。感谢您的确认。如果引用文件的内容发生更改,
    文件
    实例不会更改。是的,
    equals()
    方法仅在
    文件
    实例引用的路径上计算。那么
    hashcode()
    呢?实际上,我想看看
    java.io.File
    hashcode()
    方法,但手头没有源代码(来自JavaDocs:"在UNIX系统上,抽象路径名的哈希代码等于其路径名字符串和十进制值1234321的哈希代码的异或。在Microsoft Windows系统上,哈希代码等于其路径名字符串转换为小写和十进制值1234321的哈希代码的异或。区域设置不被纳入请考虑将路径名字符串小写。“这很有道理。虽然我不完全理解(因此我宽恕)在应用程序设计中,引用文件时应始终使用
    文件
    实例。为什么只使用
    字符串
    并记住它实际上是一个文件引用?但是像这种情况下关闭/打开流这样的问题将不断发生,您将不得不使用其他代码来处理。恐怕我不会查看您的观点与是否使用
    文件
    对象来存储文件路径,而不是
    字符串
    有关。我想我没有正确解释答案:)…我完全同意应该始终使用文件对象来引用文件。但是在这个问题上,为什么应该将它用作指向另一个对象的键。??我刚刚提出了一个建议,更改应用程序设计,使映射键成为文件名。嘿,Akhil,感谢你的建议,使用文件的s的规范路径正是我的hashmap所需要的。再次感谢!