Я сопоставляю файл ( "sample.txt" ) в памяти с помощью FileChannel.map()
, а затем закрываю канал, используя fc.close()
. После этого, когда я пишу в файл с помощью FileOutputStream, я получаю следующую ошибку:
java.io.FileNotFoundException: sample.txt(Запрошенная операция не может быть сформировано в файле с открытый пользователем раздел)
File f = new File("sample.txt");
RandomAccessFile raf = new RandomAccessFile(f,"rw");
FileChannel fc = raf.getChannel();
MappedByteBuffer mbf = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
fc.close();
raf.close();
FileOutputStream fos = new FileOutputStream(f);
fos.write(str.getBytes());
fos.close();
Я предполагаю, что это может быть связано с тем, что файл все еще отображается в память даже после закрытия FileChannel
. Я прав?. Если да, то как я могу "размонтировать" файл из памяти? (Я не могу найти никаких методов для этого в API).
Спасибо.
Изменить: Похоже, что (добавив метод unmap) был представлен как RFE на солнце некоторое время назад: http://bugs.sun.com/view_bug.do?bug_id=4724038