import java.io.*; class CopyPic { public static void main(String[] args) { FileOutputStream fos = null; FileInputStream fis = null; try { fos = new FileOutputStream("c:\\diaochan2.bmp");//写入文件 fis = new FileInputStream("c:\\2.bmp");//读取文件 byte[] buf =new byte[1024]; int len =0; while((len=fis.read(buf))!=-1) //这个while循环没真正看懂,只知道每次判断读取文件有没有到末尾,是末尾就返回-1。//要把源文件读到放进内存,而每次放入的数据是有限的,所以需要不断地放入。好比一缸水,用一个杯子向外舀,需要不停的舀,直到缸里没有水了。 //为什么这边用read方法//read方法把源文件中的数据放入内存中。write是写入,read是读取,基础一定要记住啊,楼主 { fos.write(buf,0,len); } } catch (IOException e) { throw new RuntimeException("复制文件失败");//为什么这边要抛复制文件失败的异常呢,不直接抛读取和写入失败的异常呢。//给用户看,结果就是复制失败,你对用户说读取和写入失败用户不理解。面对的用户要当做他们没有任何编程基础,所以只能告他们复制失败。 } finally { try { if(fis!=null) //这边的应该怎么理解 为什么要try 读取不为空//为空就不需要读取,当然就不用关闭了。所以先判断。 fis.close(); } catch (IOException e) { throw new RuntimeException("读取关闭失败"); } try { if(fos!=null) fos.close(); } catch (IOException e) { throw new RuntimeException("写入关闭失败"); } } } } |
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |