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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


复习中,准备申请入学考试,自己总结的IO流复制图片的4种方式!!!
  1. package IO;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;

  8. /*
  9. * 复制图片
  10. *
  11. * 分析:
  12. *                 复制数据,如果我们知道用记事本打开并能够读懂,就用字符流,否则用字节流。
  13. *                 通过该原理,我们知道我们应该采用字节流。
  14. *                 而字节流有4种方式,所以做这个题目我们有4种方式。推荐掌握第4种。
  15. *
  16. * 数据源:
  17. *                 c:\\a.jpg -- FileInputStream -- BufferedInputStream
  18. * 目的地:
  19. *                 d:\\b.jpg -- FileOutputStream -- BufferedOutputStream
  20. */
  21. public class CopyImageDemo {
  22.         public static void main(String[] args) throws IOException {
  23.                 // 使用字符串作为路径
  24.                 // String srcString = "c:\\a.jpg";
  25.                 // String destString = "d:\\b.jpg";
  26.                 // 使用File对象做为参数
  27.                 File srcFile = new File("c:\\a.jpg");
  28.                 File destFile = new File("d:\\b.jpg");

  29.                 // method1(srcFile, destFile);
  30.                 // method2(srcFile, destFile);
  31.                 // method3(srcFile, destFile);
  32.                 method4(srcFile, destFile);
  33.         }

  34.         // 字节缓冲流一次读写一个字节数组
  35.         private static void method4(File srcFile, File destFile) throws IOException {
  36.                 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
  37.                                 srcFile));
  38.                 BufferedOutputStream bos = new BufferedOutputStream(
  39.                                 new FileOutputStream(destFile));

  40.                 byte[] bys = new byte[1024];
  41.                 int len = 0;
  42.                 while ((len = bis.read(bys)) != -1) {
  43.                         bos.write(bys, 0, len);
  44.                 }

  45.                 bos.close();
  46.                 bis.close();
  47.         }

  48.         // 字节缓冲流一次读写一个字节
  49.         private static void method3(File srcFile, File destFile) throws IOException {
  50.                 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
  51.                                 srcFile));
  52.                 BufferedOutputStream bos = new BufferedOutputStream(
  53.                                 new FileOutputStream(destFile));

  54.                 int by = 0;
  55.                 while ((by = bis.read()) != -1) {
  56.                         bos.write(by);
  57.                 }

  58.                 bos.close();
  59.                 bis.close();
  60.         }

  61.         // 基本字节流一次读写一个字节数组
  62.         private static void method2(File srcFile, File destFile) throws IOException {
  63.                 FileInputStream fis = new FileInputStream(srcFile);
  64.                 FileOutputStream fos = new FileOutputStream(destFile);

  65.                 byte[] bys = new byte[1024];
  66.                 int len = 0;
  67.                 while ((len = fis.read(bys)) != -1) {
  68.                         fos.write(bys, 0, len);
  69.                 }

  70.                 fos.close();
  71.                 fis.close();
  72.         }

  73.         // 基本字节流一次读写一个字节
  74.         private static void method1(File srcFile, File destFile) throws IOException {
  75.                 FileInputStream fis = new FileInputStream(srcFile);
  76.                 FileOutputStream fos = new FileOutputStream(destFile);

  77.                 int by = 0;
  78.                 while ((by = fis.read()) != -1) {
  79.                         fos.write(by);
  80.                 }

  81.                 fos.close();
  82.                 fis.close();
  83.         }
  84. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

16 个回复

倒序浏览
不是用字节缓冲流最好么?
回复 使用道具 举报
刚才我发了一个,竟然没注释,被人举报了一次,吓死我了,赶紧去加上去了
回复 使用道具 举报
446111220 发表于 2015-1-8 14:15
不是用字节缓冲流最好么?

对呀,第四种
回复 使用道具 举报

可是我记得毕老师讲的是BufferedInputstream吧    难道是我记错了?
回复 使用道具 举报
就改了个包名...为了技术分也是蛮拼的..顶一下吧..
回复 使用道具 举报
总结得不错,学习了。。。
回复 使用道具 举报
学习了。谢谢
回复 使用道具 举报
哎,眼睛痛!
回复 使用道具 举报
正在看流的读写,楼主发的好些还没看到呢,参考一下了
回复 使用道具 举报
感谢分享
回复 使用道具 举报
学习了。谢谢
回复 使用道具 举报
支持一下吧
回复 使用道具 举报
先收藏,还没学到呢
回复 使用道具 举报
446111220 发表于 2015-1-8 14:37
可是我记得毕老师讲的是BufferedInputstream吧    难道是我记错了?

对呀,方法4不是指第四种,你看方法名method4
回复 使用道具 举报
赞一个!
回复 使用道具 举报
受教了,不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马