A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 尤圣回 中级黑马   /  2012-9-16 16:54  /  1344 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
你的main()方法中没有调用copy()方法啊?

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

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

可是没有被关闭
回复 使用道具 举报
类加载后,静态方法可以直接调用。
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判断语句都为真,执行关闭流。
回复 使用道具 举报
你的main方法里根本没有copy()方法,如main()方法里调用了copy()方法并且传入的参数没有错使输入输出流创建成功不为空,流就会最终关闭。因为finally方法是无论如何都会执行的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马