黑马程序员技术交流社区

标题: 这个流到底关闭了吗 [打印本页]

作者: 尤圣回    时间: 2012-9-16 16:54
标题: 这个流到底关闭了吗
  1. import java.io.FileInputStream;
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.OutputStream;

  6. public class IOTest {
  7.         public static void main(String[] args) {
  8.                
  9.         }
  10.         public static void copy(String src, String dest) throws IOException {
  11.         InputStream in = null;
  12.         OutputStream out = null;
  13.         try {
  14.             in = new FileInputStream(src);
  15.             out = new FileOutputStream(dest);
  16.             byte[] buf = new byte[1024];
  17.             int n;
  18.             while ((n = in.read(buf)) > 0)
  19.                 out.write(buf, 0, n);
  20.         } finally {
  21.             if (in != null) in.close();
  22.             if (out != null) out.close();
  23.         }  
  24.         }
  25. }
复制代码

作者: 唐志兵    时间: 2012-9-16 17:00
你的main()方法中没有调用copy()方法啊?

如果调用了copy()方法,程序会执行try中的语句,执行完后会转到 finally语句中。所以 流是关闭了的。
作者: 广驰    时间: 2012-9-16 17:47
放在finally里面的语句一定会被执行,所以如果in和out都有值,那没流就肯定会被关闭,如果没有值,那么这两个变量仅仅是一个引用,没有实体对象,根本就不存在关闭就会被抛出异常
作者: 尤圣回    时间: 2012-9-16 18:25
唐志兵 发表于 2012-9-16 17:00
你的main()方法中没有调用copy()方法啊?

如果调用了copy()方法,程序会执行try中的语句,执行完后会转到  ...

可是没有被关闭
作者: 任艳旭    时间: 2012-9-16 19:28
类加载后,静态方法可以直接调用。
try{}和finally{}语句中,只要执行了try就一定执行finally,但是因为下面的代码是if判断语句:
finally {
            if (in != null) in.close();
            if (out != null) out.close();
        }
而且你上面的把in和out都赋值成了文件输入流和文件输出流。
in = new FileInputStream(src);
out = new FileOutputStream(dest);
if判断语句都为真,执行关闭流。
作者: 柳彬    时间: 2012-9-16 22:41
你的main方法里根本没有copy()方法,如main()方法里调用了copy()方法并且传入的参数没有错使输入输出流创建成功不为空,流就会最终关闭。因为finally方法是无论如何都会执行的。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2