一.使用字节流复制图片

  1. //字节流方法
  2. public static void copyFile()throws IOException {
  3.  
  4. //1.获取目标路径
  5. //(1)可以通过字符串
  6. // String srcPath = "E://11.jpg";
  7. // String destPath = "E://22.jpg";
  8. //(2)通过文件类
  9. File srcPath = new File("E://11.jpg");
  10. File destPath = new File("E://22.jpg");
  11. //2.创建通道,依次 打开输入流,输出流
  12. FileInputStream fis = new FileInputStream(srcPath);
  13. FileOutputStream fos = new FileOutputStream(destPath);
  14.  
  15. byte[] bt = new byte[1024];
  16. //3.读取和写入信息(边读取边写入)
  17. while (fis.read(bt) != -1) {//读取
  18. fos.write(bt);//写入
  19. }
  20.  
  21. //4.依次 关闭流(先开后关,后开先关)
  22. fos.close();
  23. fis.close();
  24. }

二.使用字符流复制图片

  1. //字符流方法,写入的数据会有丢失
  2. public static void copyFileChar()throws IOException {
  3.  
  4. //获取目标路径
  5. File srcPath = new File("E://11.jpg");
          File destPath = new File("E://22.jpg");
  6. //创建通道,依次 打开输入流,输出流
  7. FileReader frd = new FileReader(srcPath);
  8. FileWriter fwt = new FileWriter(destPath);
  9. char[] ch = new char[1024];
  10. int length = 0;
  11. // 读取和写入信息(边读取边写入)
  12. while ((length = frd.read(ch)) != -1) {//读取
  13. fwt.write(ch,0,length);//写入
  14. fwt.flush();
  15. }
  16.   // 依次 关闭流(先开后关,后开先关)
  17. frd.close();
  18. fwt.close();
  19. }

三.复制图片过程中的异常处理

  1. //以复制图片为例,实现try{ }cater{ }finally{ } 的使用
  2. public static void test(){
  3. //1.获取目标路径
  4. File srcPath = new File("E://11.jpg");
          File destPath = new File("E://11.jpg");
    //2.创建通道,先赋空值
  5. FileInputStream fis = null;
  6. FileOutputStream fos = null;
  7. //3.创建通道时需要抛出异常
  8. try {
  9. fis = new FileInputStream(srcPath);
  10. fos = new FileOutputStream(destPath);
  11. byte[] bt = new byte[1024];
  12. //4.读取和写入数据时需要抛出异常
  13. try {
  14. while(fis.read(bt) != -1){
  15. fos.write(bt);
  16. }
  17. } catch (Exception e) {
  18. System.out.println("储存盘异常,请修理");
  19. throw new RuntimeException(e);
  20. }
  21.  
  22. } catch (FileNotFoundException e) {
  23. System.out.println("资源文件不存在");
  24. throw new RuntimeException(e);
  25. }finally{
    //5.无论有无异常,需要关闭资源(分别抛出异常)
  26. try {
  27. fos.close();
  28. } catch (Exception e) {
  29. System.out.println("资源文件或目标文件关闭失败!");
  30. throw new RuntimeException(e);
  31. }
    try {
  32. fis.close();
  33. } catch (IOException e) {
  34. System.out.println("资源文件或目标文件关闭失败!");
  35. throw new RuntimeException(e);
  36. }
  37.  
  38. }
  39. }

字符流  =  字节流 + 解码 --->找对应的码表  GBK

字符流解码 : 拿到系统默认的编码方式来解码

将图片中的二进制数据和GBK码表中的值进行对比, 对比的时候会出现二进制文件在码表中找不对应的值,他会将二进制数据标记为未知字符,当我在写入数据的是后会将未知的字符丢掉。所以会造成图片拷贝不成功(丢失数据)

疑问:何时使用字节流?何时使用字符流?

使用字节流的场景:读写的数据不需要转为我能够看得懂的字符。比如:图片,视频,音频...

使用字符流的场景 :如果读写的是字符数据。

java IO流复制图片的更多相关文章

  1. java IO流 复制图片

    (一)使用字节流复制图片 //字节流方法 public static void copyFile()throws IOException { //1.获取目标路径 //(1)可以通过字符串 // St ...

  2. java IO流读取图片供前台显示

    最近项目中需要用到IO流来读取图片以提供前台页面展示,由于以前一直是用url路径的方式进行图片展示,一听说要项目要用IO流读取图片感觉好复杂一样,但任务下达下来了,做为程序员只有选择去执行喽,于是找了 ...

  3. java io流(字节流)复制文件

    java io流(字节流) 复制文件 //复制文件 //使用字节流 //复制文本文件用字符流,复制其它格式文件用字节流 import java.io.*; public class Index{ pu ...

  4. java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  5. Java IO流详尽解析

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  6. Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

    Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...

  7. Java IO 流总结篇

    1. 写在前面的话 I/O ,I 是 Input (输入)的缩写,O是Output (输出) 的缩写,众所周知,人与人之间想要沟通交流,就需要讲彼此都能听懂的语言,比如大家都统一说英语. 人类如果想和 ...

  8. Java IO流学习总结一:输入输出流

    Java IO流学习总结一:输入输出流 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54292148 本文出自[赵彦军的博客] J ...

  9. Java IO流详尽解析(转)

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

随机推荐

  1. IOS开发基础知识--碎片31

    1:UITableViewCell drawInRect 在iOS7中失败 解决办法,把Cell里的布局移到新建的View里面,在View里面实现DrawInRect,然后在Cell里面加载View, ...

  2. Linux命令操作

    该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,就如同DOS下的copy命令一样,功能非常强大. 语法: cp [选项] 源文件或目录 目标文件或目录 说明:该命令把指定的源文件复制到目标文件 ...

  3. Automysqlbackup: WARNING: Turning off multicore support, since pigz isn’t there.

    在使用Automysqlbackup备份MySQL时,有时候你会在邮件里面看见"WARNING: Turning off multicore support, since pigz isn' ...

  4. Reporting Service 服务启动时报错The service did not respond to the start or control request in a timely fashion

    案例环境: 启动一台数据库服务器(Windows Server 2003)的Reporting Service(SQL Server 2008 R2)服务时,出现如下错误信息: System.Inva ...

  5. .NET应用程序调试—原理、工具、方法

    阅读目录: 1.背景介绍 2.基本原理(Windows调试工具箱..NET调试扩展SOS.DLL.SOSEX.DLL) 2.1.Windows调试工具箱 2.2..NET调试扩展包,SOS.DLL.S ...

  6. angularJS 如何读写缓冲

    写在前面 1.在客户端.服务端架构中,HTTP协议是主流通信技术: 2.HTTP协议的无状态特性,节省带宽,较少服务器的负载,缓冲技术具有重要的运用:这里主要讲解在客户端浏览器中angular如何读写 ...

  7. 从零自学Hadoop(12):Hadoop命令中

    阅读目录 序 HDFS Commands User Commands Administration Commands Debug Commands 引用 系列索引 本文版权归mephisto和博客园共 ...

  8. MongoDB学习笔记~为IMongoRepository接口添加了增删改方法,针对官方驱动

    回到目录 上一讲说了MongoDB官方驱动的查询功能,这回说一下官方驱动的增删改功能,驱动在升级为2.0后,相应的insert,update和delete都只有了异步版本(或者叫并行版本),这当然也是 ...

  9. linux top 源码分析

    /* * Copyright (c) 2008, The Android Open Source Project * All rights reserved. * * Redistribution a ...

  10. native2ascii.exe 字符转码与反转码

    本人最近在做OAF的二次开发,在看别人写的代码时,发现总有类似这样的语句:”\u65e0\u6548\u7684GP\u9879\u76ee\u7f16\u53f7“,这些语句其实是用Java_hom ...