java io复制图片_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码表中的值进行对比, 对比的时候会出现二进制文件在码表中找不对应的值,他会将二进制数据标记为未知字符,当我在写入数据的是后会将未知的字符丢掉。所以会造成图片拷贝不成功(丢失数据)

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值