- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- /*
- * 需求:使用带缓冲功能的字节流复制文件。
- *
- * 分析:首先解决复制文件这类问题要高清三点:
- * 1.源文件:既然题目要求是字节流,那么源文件可以是任意类型文件,例如mp3,txt,bmp......
- * 此处我以复制一个.mp3文件为例
- * 2.目标文件:类型需要与源文件一致,名字任意,例如:target.mp3
- * 3.使用流的类型:文件字节流 + 缓冲流
- * 搞清楚以上三点之后就知道数据的流向为:
- * source.mp3--->字节缓冲流--->target.mp3
- * 这里务必要清楚缓冲流是对字节流的一种包装,以提高复制文件的效率。
- * 因此具体的复制文件的步骤如下:
- * 1.定义一个文件字节缓冲输入流,输入源文件为:source.mp3(你可以任意找一首歌作为替代)
- * 2.定义一个文件字节缓冲输出流,输出目标文件为:target.mp3
- * 3.选择两种复制文件的方式的一种
- * A:一次复制一个字节
- * B:一次复制一个字节数组
- * 4.调用输入流的read方法将源文件内容读入程序
- * 5.调用输出流的write方法将文件内容写入目标文件
- * 6.调用流的close方法关闭资源
- */
- public class IODemo {
- public static void main(String[] args) throws IOException {
- //定义一个文件字节输入流
- FileInputStream fis = new FileInputStream("source.mp3");
- //用缓冲流包装字节输入流
- BufferedInputStream bis = new BufferedInputStream(fis);
- //定义一个文件字节输出流
- FileOutputStream fos = new FileOutputStream("target.mp3");
- //用缓冲流包装字节输出流
- BufferedOutputStream bos = new BufferedOutputStream(fos);
-
- //这里选择第二种复制方式:一次复制一个字节数组
- //定义一个字节数组,长度为1024作为缓冲区
- byte[] bytes = new byte[1024];
- //定义一个变量len用于记录每次读入缓冲区数据的长度
- int len = 0;
- //对循环对文件数据进行读入和写出
- while((len = bis.read(bytes)) != -1) {
- bos.write(bytes, 0, len);
- }
-
- //关闭资源
- bis.close();
- bos.close();
- }
- }
复制代码 |