一、背景
1.在应用程序中,IO流通常是成对出现的,即输入流和输出流一起使用,例如文件的拷贝就需要通过输入流来读取文件中的数据,通过输出流将数据写入文件。
二、代码示例
1.代码演示
public static void main(String[] args) throws Exception {
//创建一个字节输入流,用于读取当前目录下source文件夹中的MP3文件
FileInputStream in = new FileInputStream("sources\\江南 style.mp3");
//创建一个字节输出流,用于读取当前目录下source文件夹中的MP3文件写入target目录下的文件中
FileOutputStream out = new FileOutputStream("target\\江南 style.mp3");
//定义一个int类型的变量len,记住每次读取的一个字节
int len;
long begintime = System.currentTimeMillis();
while((len=in.read())!=-1){
out.write(len);
}
long endtime = System.currentTimeMillis();
System.out.println(endtime-begintime);
in.close();
out.close();
}
2.代码分析
这样是比较费时间的,接下来我们就利用另外一个方式来完成我们的文件的复制操作。
三、另外的方式
1.为了提高效率也可以定义一个字节数组作为缓冲区,在拷贝文件时,可以一次性读取多个字节的数据,并保存在字节数组中,然后将字节数组中的数据一次性写入文件,接下来我们就来学习下如何使用缓冲区拷贝文件。
2.代码演示
public static void main(String[] args) throws Exception {
//创建一个字节输入流,用于读取当前目录下source文件夹中的MP3文件
FileInputStream in = new FileInputStream("sources\\江南 style.mp3");
//创建一个字节输出流,用于读取当前目录下source文件夹中的MP3文件写入target目录下的文件中
FileOutputStream out = new FileOutputStream("target\\江南 style.mp3");
//以下创建一个缓冲区用来读写文件
byte[] buff = new byte[1024];
//定义一个int类型的变量len,记住每次读取的一个字节
int len;
long begintime = System.currentTimeMillis();
while((len=in.read(buff))!=-1){
//从第一个字节开始,向文件写入len个字节
out.write(buff,0,len);
}
long endtime = System.currentTimeMillis();
System.out.println(endtime-begintime);
in.close();
out.close();
}
3.这样消耗的时间明显的减少了很多,从而说明缓冲区读写文件可以有效的提高程序的效率,这是因为程序中的缓冲区就是一块内存,用于暂放输入输出的数据,使用缓冲区减少了对文件的操作次数,所以可以提高读写的效率。
四、结束
1.以上就是两种方法对文件的复制操作,下面的方法是比较高效的,一般用的也比较多!!!