1、文件拷贝
拷贝二进制的文件使用字节流,拷贝文本文件使用字符流
示例1:将d盘下的一个压缩文件拷贝到e盘目录下(压缩文件为字节流)
package javastudy;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test17 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileInputStream fis=new FileInputStream("D:\\图片压缩工具.rar");
FileOutputStream fos=new FileOutputStream("E:\\myfile.rar");
int ch=0;
while((ch=fis.read())!=-1){ // 逐个字节读取压缩文件,但是效率比较慢
fos.write(ch);
}
fis.close();
fos.close();
}
}
执行结果
上述结果执行时,由于是每个字节读取,因此速度比较慢,通过设置缓冲区的方式,提高效率
package javastudy;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test17 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileInputStream fis=new FileInputStream("D:\\图片压缩工具.rar");
FileOutputStream fos=new FileOutputStream("E:\\myfile.rar");
int ch=0;
byte [] data=new byte[1024];//定义一个1024长度的字节数组,即设置缓冲区
while((ch=fis.read(data))!=-1){ // 将fis对象文件逐个读到数组中,每次为1024长度
fos.write(data,0,ch);//从数据第零个开始,直到第ch个,即最后可能不是1024长度
System.out.println(ch); //通过打印ch,可以看到最后一个不是正好是1024
}
fis.close();
fos.close();
}
}
执行结果1
执行结果2
2、buffer,装饰模式
将上述的代码,使用buffer形式,也就是通过装饰模式进行,在执行大文件拷贝时,效率会有提升。
package javastudy;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test17 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileInputStream fis=new FileInputStream("D:\\图片压缩工具.rar");
BufferedInputStream bis=new BufferedInputStream(fis);//装饰模式,即将fis在被包装一层
FileOutputStream fos=new FileOutputStream("E:\\myfile.rar");
BufferedOutputStream bos=new BufferedOutputStream(fos);
int ch=0;
byte [] data=new byte[1024];//定义一个1024长度的字节数组,即设置缓冲区
while((ch=bis.read(data))!=-1){ // 将fis对象文件逐个读到数组中,每次为1024长度
bos.write(data,0,ch);//从数据第零个开始,直到第ch个,即最后可能不是1024长度
System.out.println(ch);
}
fis.close();
fos.close();
}
}
执行结果
网友评论