FileNotFoundException异常对同一个文件打开FileOutputStream中使用Java NIO阅读
题
我有一个文本编辑器,用途代码几乎相同的低于读,写。当我打开小文件的编辑工作,我总是当我再次尝试拯救他们得到这个错误。但真正有趣的事情是,我的文字编辑器工作正常文件有大约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读书?
其他提示
您需要明确取消映射您用FileChannel.map(...)
调用映射到的区域。
有map(...)
的Javadoc这样说:
一个映射,一旦建立,是不依赖于那个被用来创建它的文件信道。关闭通道,特别地,具有在所述映射的有效性没有任何影响。
不隶属于 StackOverflow