FileNotFoundException异常对同一个文件打开FileOutputStream中使用Java NIO阅读

StackOverflow https://stackoverflow.com/questions/2146656

  •  23-09-2019
  •  | 
  •  

我有一个文本编辑器,用途代码几乎相同的低于读,写。当我打开小文件的编辑工作,我总是当我再次尝试拯救他们得到这个错误。但真正有趣的事情是,我的文字编辑器工作正常文件有大约600个字节以上(似乎每一次变化),行为,我一直没能在这里复制。

我的当前的解决方法是,以检查文件大小<1024个字节,并且使用java.io如果是这样的话。

import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.nio.charset.*;

public class Test {
    public static void main(String[] args) {
        String text = null;
        try {
            FileInputStream fis = new FileInputStream("test.txt");
            FileChannel ifc = fis.getChannel();
            CharBuffer cb = Charset.forName("ISO-8859-15").newDecoder().
                    decode(ifc.map(FileChannel.MapMode.READ_ONLY, 0,
                    (int) ifc.size()));
            text = cb.toString();
            ifc.close();
            fis.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        try {
            FileOutputStream fos = new FileOutputStream("test.txt");
            OutputStreamWriter osw = new OutputStreamWriter(
                    fos, "ISO-8859-15");
            osw.write(text);
            osw.close();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

有关上面的代码,我得到这个错误对于test.txt的各种大小从4个字节到10KB:

java.io.FileNotFoundException: test.txt (The requested operation cannot be perfo
rmed on a file with a user-mapped section open)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at Test.main(Test.java:23)

任何人都可以解释我做错了,我怎么能得到这个工作,同时仍与NIO读书?

有帮助吗?

解决方案

斯蒂芬Ç告诉你取消映射的缓冲器。

然而,在这里是一个链接到仍然打开(2002)请求MappedBybeBuffer.unmap方法。

它有几个建议的解决方法,所以你可以尝试一下。

其他提示

您需要明确取消映射您用FileChannel.map(...)调用映射到的区域。

map(...)的Javadoc这样说:

  

一个映射,一旦建立,是不依赖于那个被用来创建它的文件信道。关闭通道,特别地,具有在所述映射的有效性没有任何影响。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top