Я отображаю файл ("sample.txt") в память, используя FileChannel.map()
, а затем закрываю канал, используя fc.close()
. После этого, когда я пишу в файл с помощью FileOutputStream, я получаю следующую ошибку:
java.io.FileNotFoundException:
sample.txt (Запрошенная операция
не может быть выполнено для файла с
пользовательский раздел открыт) * 1006 *
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).
Спасибо.
Edit:
Похоже, это (добавление метода unmap) было представлено как RFE для Sun некоторое время назад:
http://bugs.sun.com/view_bug.do?bug_id=4724038