我正在开发一个 sc2replay 解析工具。我在 MPQLIB http://code.google.com/p/mpqlib/之上构建它
不幸的是,该工具使用文件通道来读取 bzip 文件,并使用map(MapMode.READ_ONLY, hashtablePosition, hashTableSize);
调用该函数后,关闭文件通道不会在进程中释放文件。具体来说,我无法重命名/移动文件。
该问题出现在 Java 7 中,并且在 Java 6 上运行良好。
这是一个简单的代码片段来复制它:
FileInputStream f = new FileInputStream("test.SC2Replay");
FileChannel fc = f.getChannel();
fc.map(MapMode.READ_ONLY, 0,1);
fc.close();
new File("test.SC2Replay").renameTo(new File("test1.SC2Replay"));
注释掉 fc.map 将允许您重命名文件。
PS from here我应该关闭 FileChannel 吗?
它指出您不需要同时关闭文件通道和文件流,因为关闭一个会关闭另一个。我也尝试关闭一个或两个,但仍然没有奏效。
在 Java 7 上使用 FileChannel.map 读取数据后重命名文件是否有解决方法,因为现在每个人似乎都有 Java 7?