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码表中的值进行对比, 对比的时候会出现二进制文件在码表中找不对应的值,他会将二进制数据标记为未知字符,当我在写入数据的是后会将未知的字符丢掉。所以会造成图片拷贝不成功(丢失数据) 疑问:何时使用字节流?何时使用字符流? 使用字节流的场景:读写的数据不需要转为我能够看得懂的字符。比如:图片,视频,音频... 使用字符流的场景 :如果读写的是字符数据。 |
java IO流复制图片的更多相关文章
- java IO流 复制图片
(一)使用字节流复制图片 //字节流方法 public static void copyFile()throws IOException { //1.获取目标路径 //(1)可以通过字符串 // St ...
- java IO流读取图片供前台显示
最近项目中需要用到IO流来读取图片以提供前台页面展示,由于以前一直是用url路径的方式进行图片展示,一听说要项目要用IO流读取图片感觉好复杂一样,但任务下达下来了,做为程序员只有选择去执行喽,于是找了 ...
- java io流(字节流)复制文件
java io流(字节流) 复制文件 //复制文件 //使用字节流 //复制文本文件用字符流,复制其它格式文件用字节流 import java.io.*; public class Index{ pu ...
- java IO流详解
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- Java IO流详尽解析
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream
Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...
- Java IO 流总结篇
1. 写在前面的话 I/O ,I 是 Input (输入)的缩写,O是Output (输出) 的缩写,众所周知,人与人之间想要沟通交流,就需要讲彼此都能听懂的语言,比如大家都统一说英语. 人类如果想和 ...
- Java IO流学习总结一:输入输出流
Java IO流学习总结一:输入输出流 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54292148 本文出自[赵彦军的博客] J ...
- Java IO流详尽解析(转)
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
随机推荐
- HTML5进阶段内联标签汇总(小篇)
内联元素,与别人公用一行,但是设置宽高无效.其特点: ①和其他元素都在一行上: ②高,行高及外边距和内边距不可改变: ③宽度就是它的文字或图片的宽度,不可改变 ④内联元素只能容纳文本或者其他内联元素 ...
- ae GP制作缓冲区分析
private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { // ...
- 用UILocalNotification实现一个闹钟(Swift)
之前项目需求要实现一个闹钟,github上找了半天发现都是很旧的代码了,所以就准备自己写一个,刚好最近在学习Swift,就用Swift写了一个demo放在这里:https://github.com/P ...
- Mac常用shell命令
几个常用命令 pwd 命令名称:pwd 英文:print work directory 描述:查看当前工作目录的完整路径 ls 英文全称: list 描述:列出目录下的内容清单 常用参数: -l:列出 ...
- Servlet的生命周期+实现方式
1.Servlet的生命周期: (1)被创建: 默认情况下,Servlet第一次被访问时,被服务器创建.会调用init()方法. 一个 ...
- 清理iOS工程里无用的图片,可瘦身ipa
工程在经过多人后,往往会出现较多的垃圾,导致打包出来的ipa文件偏大,有时候我们会通过清理代码来给程序瘦身,而瘦身ipa效果明显的,主要通过清理程序里的无用图片. 推荐一个清理图片的应用 https: ...
- Red Hat Enterprise Server 6.0 安装Sendmail相关包
由于需要在Linux服务器(Red Hat Enterprise Linux Server release 6.0)上配置邮件服务,需要安装Sendmail包,一般Sendmail的安装有两种方式:R ...
- 原生 CSS 网格布局学习笔记
下是来自Oliver Williams的帖子. Oliver已经学习了相当长时间的原生CSS网格,可以说是在CSS网格方面有一定的发言权.在这篇文章中,他将以非同寻常的思路分析自己的CSS网格布局学习 ...
- ASP.NET MVC Razor
Razor是MVC3中才有的新的视图引擎.我们知道,在ASP.NET中,ASPX的视图引擎依靠<%和%>来调用C#指令.而MVC3以后有了一套新的使用@标记的Razor语法,使用起来更灵活 ...
- Linux--shell脚本之正则表达式
一.正则表达式的概念及特点: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑.规 ...