java IO流复制图片

一.使用字节流复制图片

//字节流方法
      public static void copyFile()throws IOException {

          //1.获取目标路径
          //(1)可以通过字符串
  //        String srcPath = "E://11.jpg";
  //        String destPath = "E://22.jpg";
          //(2)通过文件类
         File srcPath = new File("E://11.jpg");
         File destPath = new File("E://22.jpg");
         //2.创建通道,依次 打开输入流,输出流
         FileInputStream fis = new FileInputStream(srcPath);
         FileOutputStream fos = new FileOutputStream(destPath);

         byte[] bt = new byte[1024];
            //3.读取和写入信息(边读取边写入)
         while (fis.read(bt) != -1) {//读取
             fos.write(bt);//写入
         }

         //4.依次 关闭流(先开后关,后开先关)
         fos.close();
         fis.close();
     }

二.使用字符流复制图片

  //字符流方法,写入的数据会有丢失
      public static void copyFileChar()throws IOException {

          //获取目标路径
          File srcPath = new File("E://11.jpg");      File destPath = new File("E://22.jpg");
          //创建通道,依次 打开输入流,输出流
          FileReader frd = new FileReader(srcPath);
         FileWriter fwt = new FileWriter(destPath);
         char[] ch = new char[1024];
         int length = 0;
         // 读取和写入信息(边读取边写入)
         while ((length = frd.read(ch)) != -1) {//读取
            fwt.write(ch,0,length);//写入
             fwt.flush();
         }
    // 依次 关闭流(先开后关,后开先关)
         frd.close();
         fwt.close();
     }

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

//以复制图片为例,实现try{ }cater{ }finally{ } 的使用
         public static void test(){
              //1.获取目标路径
             File srcPath = new File("E://11.jpg");      File destPath = new File("E://11.jpg");              //2.创建通道,先赋空值
              FileInputStream fis = null;
              FileOutputStream fos = null;
             //3.创建通道时需要抛出异常
             try {
                 fis = new FileInputStream(srcPath);
                 fos = new FileOutputStream(destPath);
                 byte[] bt = new byte[1024];
                 //4.读取和写入数据时需要抛出异常
                 try {
                     while(fis.read(bt) != -1){
                         fos.write(bt);
                     }
                 } catch (Exception e) {
                     System.out.println("储存盘异常,请修理");
                     throw new RuntimeException(e);
                 }

               } catch (FileNotFoundException e) {
                 System.out.println("资源文件不存在");
                throw new RuntimeException(e);
             }finally{                 //5.无论有无异常,需要关闭资源(分别抛出异常)
                 try {
                     fos.close();
                 } catch (Exception e) {
                     System.out.println("资源文件或目标文件关闭失败!");
                     throw new RuntimeException(e);
                 }                 try {
                     fis.close();
                 } catch (IOException e) {
                     System.out.println("资源文件或目标文件关闭失败!");
                     throw new RuntimeException(e);
                 }

             }
         }

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

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

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

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

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

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

时间: 2024-10-09 23:07:12

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

java IO流拷贝图片

图片属于字节流,使用InputStream和OutputStream. import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyImage { public static void main(String[] args) throws IOException { File inFile = n

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

java io流(字节流) 复制文件 //复制文件 //使用字节流 //复制文本文件用字符流,复制其它格式文件用字节流 import java.io.*; public class Index{ public static void main(String[] args) throws Exception{ //字符流方式 //FileReader fz = new FileReader("E:/1.txt"); //FileWriter zt = new FileWriter(&qu

java IO流

* IO流用来处理设备之间的数据传输 * Java对数据的操作是通过流的方式 * Java用于操作流的类都在IO包中 * 流按流向分为两种:输入流,输出流. * 流按操作类型分为两种: * 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的 * 字符流 : 字符流只能操作纯字符数据,比较方便. * IO流常用父类 * 字节流的抽象父类: * InputStream * OutputStream * 字符流的抽象父类: * Reader * Writer * IO程序

Java:IO流与文件基础

Java:IO流与文件基础 说明: 本文所有内容包含图片均为MrSaber自己编写,转载请练习我哦. 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象称作 输入流,可以向其中写入一个字节序列的对象称作 输出流. ? 这些字节序列的来源可以是:文件.网络连接.内存块等. ? 抽象类InputStream和OutputStream是构成输入/输出(I/O)的基础. ? 因为面向字节的流

Java IO流详尽解析(转自 http://www.2cto.com/kf/201312/262036.html)

流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表.字节流和字符流的区别

Java IO流详尽解析(大神之作)

流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表.字节流和字符流的区别

Java IO流详尽解析

流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流.根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表.字节流和字符流的区别: 读写单位不同:字节流以字节(8bit)为单位,字符

Java IO流详尽解析(转)

流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表.字节流和字符流的区别

java IO流详解(一)

从本篇博文开始,详细讲解JAVA IO流的基本操作,力求每一个例子都给大家一个DEMO,在最终完成的时候,我会贴出最终的源码,方便大家交流学习. 上一篇博文中转载了大神的博文和图片,非常好! 文章链接如下:Java IO流 下面一个个的用实例进行讲解每个IO流的基本用法. 1 File文件 public static void main(String[] args) throws IOException { File file = new File("."); myPrint(file