私は 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 ここからFileChannel を閉じる必要がありますか?
ファイルチャネルとファイルストリームの両方を閉じる必要はないと述べています。これは、一方を閉じると他方が閉じられるためです。また、どちらかまたは両方を閉じようとしましたが、それでも機能しませんでした。
Java 7 で FileChannel.map を使用してデータを読み取った後にファイルの名前を変更する方法はありますか?