BufferedWriter close()导致阻塞?

时间:2015-04-24 10:40:20

标签: java android

代码如下

    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”);

无效,无法打印任何内容。为什么?

2 个答案:

答案 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