Я работаю над инструментом синтаксического анализа 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 позволит вам переименовать файл.
P.S. отсюда Должен ли я закрыть FileChannel?
В нем говорится, что вам не нужно закрывать и файловый канал, и файловый поток, потому что закрытие одного приведет к закрытию другого. Я также пытался закрыть один или оба, но все равно не работал.
Есть ли обходной путь для переименования файла после чтения данных с помощью FileChannel.map на Java 7, потому что в настоящее время у всех есть Java 7?