(一)使用字节流复制图片

 //字节流方法
public static void copyFile()throws IOException { //1.获取目标路径
//(1)可以通过字符串
// String srcPath = "C:\\Users\\bg\\Desktop\\截图笔记\\11.jpg";
// String destPath = "C:\\Users\\bg\\Desktop\\图片备份\\11.jpg"; //(2)通过文件类
File srcPath = new File("C:\\Users\\bg\\Desktop\\截图笔记\\22.PNG");
File destPath = new File("C:\\Users\\bg\\Desktop\\图片备份\\22.PNG"); //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("C:\\Users\\bg\\Desktop\\截图笔记\\33.PNG");
File destPath = new File("C:\\Users\\bg\\Desktop\\图片备份\\33.PNG"); //创建通道,依次 打开输入流,输出流
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("C:\\Users\\bg\\Desktop\\截图笔记\\55.PNG");
File destPath = new File("C:\\Users\\bg\\Desktop\\图片备份\\55.PNG");
//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码表中的值进行对比, 对比的时候会出现二进制文件在码表中找不对应的值,他会将二进制数据标记为未知字符,当我在写入数据的是后会将未知的字符丢掉。所以会造成图片拷贝不成功(丢失数据)

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

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

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

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

  1. java IO流复制图片

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

  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. vue-cli中process.env配置以及打包本地运行或者线上运行配置

    我们知道打包默认npm run build,可是打包后点击dist文件中index.html一片空白.问题在于路径问题.我们在工程文件的最外层增加文件.env.production这个文件就是这么奇怪 ...

  2. BestCoder Round #2 1001 TIANKENG’s restaurant

    不得不说,bastcoder是个hack游戏啊.!. 题意:求最少要多少张椅子才干让全部来的客人有地方坐!! 就是一个区间的处理吧!!!和HDU  1556 我待水似流年.流年待我似水神似! ..! ...

  3. Spring学习笔记——Spring中lazy-init与abstract具体解释

    Spring的懒载入的作用是为了避免无谓的性能开销,就是当真正须要数据的时候才去运行数据的载入操作.不只在Spring中.我们在实际的编码过程中也应该借鉴这种思想,来提高我们程序的效率. 首先我们看一 ...

  4. 使用python在极坐标中生成一条直线

    在测试雷达时,往往需要测试雷达的数据是否准确,这时就需要在雷达图中显示一条标准的直线作为对比. "create a wall" import numpy as np import ...

  5. 李洪强iOS开发之性能优化技巧

    李洪强iOS开发之性能优化技巧 通过静态 Analyze 工具,以及运行时 Profile 工具分析性能瓶颈,并进行性能优化.结合本人在开发中遇到的问题,可以从以下几个方面进行性能优化. 一.view ...

  6. [转] When to use what language and why

    Published by Seraphimsan Oct 13, 2010 (last update: Oct 14, 2010) When to use what language and why ...

  7. 3.NetDh框架之缓存操作类和二次开发模式简单设计(附源码和示例代码)

    前言 NetDh框架适用于C/S.B/S的服务端框架,可用于项目开发和学习.目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型.多库实例,简单强大: 此部分具体说明可参考博客: ...

  8. WEB 字体

    之前如果想在自己的网站使用某些好看的字体,总是迫不得已得在PS里先把字体图片做好.虽然这样做也能达到我们想要的效果,但是这样就增加了HTTP请求 (如果在多处使用的话),即使合并所有图片,也不好管理, ...

  9. Ubuntu 12.04 make menuconfig 出现 Unable to find the ncurses libraries or the required header files.

    问题: *** Unable to find the ncurses libraries or the *** required header files. *** 'make menuconfig' ...

  10. javascript正则找script标签, link标签里面的src或者 href属性

    1. [代码]javascript 简单的search    <script(?:(?:\s|.)+?)src=[\"\'](.+?)[\"\'](?!\<)(?:(? ...