1) 在source目录下存放“IO流.avi”文件,并确保target目录下没有上次拷贝遗留的文件。 2) 编写Example05类。在main()方法中,分别创建缓冲字节输出流和缓冲字节输入流对象,并指定拷贝文件的源及目标路径。 3) 定义一个字节数组作为缓冲区,缓冲输入流将源文件数据读取到缓冲区中,然后缓冲输出流将缓冲区中数据写入到目标文件中,循环往复直到文件拷贝结束,并计算拷贝文件总耗时。 4) 使用close()方法,关闭流资源。
时间: 2023-06-13 18:08:19 浏览: 167
以下是代码实现:
```java
import java.io.*;
public class Example05 {
public static void main(String[] args) {
long startTime = System.currentTimeMillis(); // 记录开始时间
String sourcePath = "source/IO流.avi";
String targetPath = "target/IO流.avi";
byte[] buffer = new byte[1024]; // 缓冲区大小为 1KB
try (
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(sourcePath)); // 缓冲字节输入流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(targetPath)); // 缓冲字节输出流
) {
int len;
while ((len = bis.read(buffer)) != -1) { // 从输入流中读取数据到缓冲区中
bos.write(buffer, 0, len); // 将缓冲区中的数据写入到输出流中
}
} catch (IOException e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis(); // 记录结束时间
System.out.println("文件拷贝完成,总耗时:" + (endTime - startTime) + "ms");
}
}
```
代码注释中已经解释了每一步的实现原理,说明如下:
1. 使用 BufferedInputStream 和 BufferedOutputStream 包装 FileInputStream 和 FileOutputStream,以实现缓冲读写文件的功能。
2. 定义一个字节数组作为缓冲区,缓冲输入流读取数据到缓冲区中,缓冲输出流从缓冲区中写出数据到目标文件中。
3. 使用 while 循环不断从输入流中读取数据到缓冲区中,直到读取到文件末尾(返回值为 -1),然后再将缓冲区中的数据写出到目标文件中。
4. 在 try-with-resources 语句中使用自动关闭流资源的方式,无需手动关闭流。
5. 记录开始和结束时间,计算文件拷贝总耗时并输出。
阅读全文