PrintWriter pw = null;
try
{
pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream( "c:\\xyz.txt")), true);
}
catch (Exception e) {
} finally {
if (pw != null) {
pw.close();
pw = null;
}采用这种方法,里边嵌套 new FileOutputStream( "c:\\xyz.txt")) ,
打开了一个输出流,但FileOutputStream没有关闭,这样会不会有问题 ?

解决方案 »

  1.   

    应该不用吧!FileOutputStream与OutputStreamWriter在执行完
    pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream( "c:\\xyz.txt")), true); 
    生命周期就已经结束了~~
      

  2.   

    hehe,问题有点,较真了能找个方法测试吗?
      

  3.   

    没问题的,java类库中的各种流采用装饰模式.所做的操作都是基于被装饰类的操作
      

  4.   

    另外一个问题
      
       在方法A() 定义一个FileOutputStream 类型变量,当作参数传给方法 B(FileOutputStream  FO)
    关闭动作,
    是在方法A里,
    还是方法B里,
    还是方法A,B都执行关闭操作?
      

  5.   

    5楼的正解pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream( "c:\\xyz.txt")), true); 在这段代码里
    FileOutputStream被OutputStreamWriter装饰
    OutputStreamWriter又被PrintWriter装饰
    当调用pw.close()时,就会OutputStreamWriter的close(),
    同样,OutputStreamWriter也会调用FileOutputStream的close();
    这样就OK了
      

  6.   

    pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream( "c:\\xyz.txt")), true); 
    ==========================================================================================
    pw关闭的输出流,但是pw的输出流就是OutputStreamWriter
    OutputStreamWriter里的输出流又是FileOutputStream
    所以光了pw,就全部关闭了
      

  7.   

    还是一样在finallly块中做关闭
      

  8.   


    还是一样在finallly块中做关闭
      

  9.   


    恩。同意。
    另外,中间的FileOutputStream,如果你非的想关闭的话,怎么关闭呀?有没有实例名。呵呵
      

  10.   

    "FileOutputStream被OutputStreamWriter装饰 
    OutputStreamWriter又被PrintWriter装饰 
    当调用pw.close()时,就会OutputStreamWriter的close(), 
    同样,OutputStreamWriter也会调用FileOutputStream的close(); "
    正解
      

  11.   

     在方法A() 定义一个FileOutputStream 类型变量,当作参数传给方法 B(FileOutputStream  FO) 
    关闭动作, 
    是在方法A里, 
    还是方法B里, 
    还是方法A,B都执行关闭操作?
    ------------------------------------------
    引申一个问题,
    java 里方法的参数的传递,  是把变量的 引用传递过去了,是不?