设为首页 加入收藏

TOP

Java IO流 复制图片
2016-12-12 08:15:28 】 浏览:1132
Tags:Java 复制 图片

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


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

//1.获取目标路径
//(1)可以通过字符串
// String srcPath = "C:\\Users\\linuxidc\\Desktop\\截图笔记\\11.jpg";
// String destPath = "C:\\Users\\linuxidc\\Desktop\\图片备份\\11.jpg";

//(2)通过文件类
File srcPath = new File("C:\\Users\\linuxidc\\Desktop\\截图笔记\\22.PNG");
File destPath = new File("C:\\Users\\linuxidc\\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\\linuxidc\\Desktop\\截图笔记\\33.PNG");
File destPath = new File("C:\\Users\\linuxidc\\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\\linuxidc\\Desktop\\截图笔记\\55.PNG");
File destPath = new File("C:\\Users\\linuxidc\\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码表中的值进行对比, 对比的时候会出现二进制文件在码表中找不对应的值,他会将二进制数据标记为未知字符,当我在写入数据的是后会将未知的字符丢掉。所以会造成图片拷贝不成功(丢失数据)


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


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


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


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇用HashSet的add方法谈hashcode和e.. 下一篇Java IO流 之 字符流

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目