我正在研究sc2replay解析工具。我建立它在MPQLIB http://code.google.com/p/mpqlib/Java 7文件通道調用映射方法後無法正常關閉
的頂部不幸的是,工具使用filechannels通過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將允許重新命名文件。
P.S.從這裏開始Should I close the FileChannel?
它聲明你不需要關閉filechannel和filestream,因爲關閉一個會關閉另一個。我也嘗試關閉或兩者都仍然沒有工作。
在Java 7上使用FileChannel.map讀取數據後重新命名文件是否有解決方法,因爲現在似乎每個人都有Java 7?
是否關閉通道或流引發某種RuntimeException? – 0xCAFEBABE
不會產生異常。我認爲這可能是Java 7本身的一個bug。我正在考慮將所有內容移植到.NET xD – tskaahyeah