代码如下
BufferedWriter bw = null;
try
{
bw = new BufferedWriter(new OutputStreamWriter(System.out));
for(Student stu: ts) {
bw.write(stu.toString());
bw.newLine();
bw.flush();
}
bw.close();
System.out.println("print something");
} catch(Exception e) {
System.out.println("fail...");
}
似乎BufferedWriter close()会导致阻塞,而
System.out.println(“print something”);
无效,无法打印任何内容。为什么?
答案 0 :(得分:5)
答案在BufferedWriter#close
的文档中:
关闭流,先冲洗它。关闭流后,进一步
write()
或flush()
次调用将导致IOException
被抛出。关闭之前关闭的流无效。
您正在关闭System.out
流,然后尝试System.out.println
。
答案 1 :(得分:0)
您还需要关闭您创建的OutputStreamWriter以释放System.out。您可以在不命名对象的情况下内联创建它,但它永远不会关闭。
OutputStreamWriter osw=new OutputStreamWriter(System.out);
bw = new BufferedWriter(osw);
-----
The later:
bw.close();
osw.close();
另外考虑关闭try-catch
的 finally 块