日期:2014-05-20  浏览次数:20948 次

JAVA IOException 出错,求指教
package Saolei_main1;
import java.awt.*;
import javax.swing.*;
import java.io.*;

public class Flc {
public static void main(String[] args)
{
String str="fdsafdsaf";
FileWriter fw=null;
BufferedWriter bw=null;
try {
fw=new FileWriter("d:\\a.txt");
bw=new BufferedWriter(fw);
bw.write(str);

} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}

finally
{
try {
fw.close();
bw.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}

}
}



一运行会出现:
java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(StreamEncoder.java:26)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:99)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:190)
at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:111)
at java.io.BufferedWriter.close(BufferedWriter.java:246)
at Saolei_main1.Flc.main(Flc.java:26)
文件里面什么都没有写入,如果文件里面有东西,还会被清空,求指教!!!!!!!!

------解决方案--------------------
fw.close();
bw.close();


顺序改一下 
先关bw 再关fw
不然的话buffer里的字符真正写的时候fw已经关闭了
------解决方案--------------------
只需要
bw.close();


fw.close();删了吧。

因为在BufferedWriter的close里会把fw close掉的。
也是你这里出错的原因,因为你先把fw close了,所以在BufferedWriter的close里再次
试图关闭一个已经关闭的流就java.io.IOException: Stream closed了。

参考:BufferedWriter close 的代码。
public void close() throws IOException JavaDoc {
synchronized (lock) {
if (out == null)
return;
flushBuffer();
out.close(); //此处就是你的fw
out = null;
cb = null;
}