已知d盘某个文件夹下有一个照片“三亚风光1.jpg”。编程实现将该照片复制到d盘下的另一个文件夹中。 【要求】 分别用“逐个字节”拷贝方式和“字节流缓冲区”拷贝方式完成文件复制,并输出复制文件所用的时间(ms),并比较二者的效率。,用Java io字节流方式编写
时间: 2024-03-11 11:48:49 浏览: 84
好的,我明白了。以下是Java IO字节流方式实现的代码:
```java
import java.io.*;
public class FileCopy {
public static void main(String[] args) {
String srcPath = "D:\\folder1\\三亚风光1.jpg"; // 源文件路径
String destPath = "D:\\folder2\\三亚风光1.jpg"; // 目标文件路径
// 逐个字节拷贝方式
long start1 = System.currentTimeMillis(); // 记录开始时间
copyByByte(srcPath, destPath);
long end1 = System.currentTimeMillis(); // 记录结束时间
System.out.println("逐个字节拷贝方式用时:" + (end1 - start1) + "ms");
// 字节流缓冲区拷贝方式
long start2 = System.currentTimeMillis(); // 记录开始时间
copyByBuffer(srcPath, destPath);
long end2 = System.currentTimeMillis(); // 记录结束时间
System.out.println("字节流缓冲区拷贝方式用时:" + (end2 - start2) + "ms");
}
// 逐个字节拷贝方式
public static void copyByByte(String srcPath, String destPath) {
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcPath));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destPath));
int len;
while ((len = bis.read()) != -1) {
bos.write(len);
}
bis.close();
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 字节流缓冲区拷贝方式
public static void copyByBuffer(String srcPath, String destPath) {
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcPath));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destPath));
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bis.close();
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
其中,`copyByByte`方法是逐个字节拷贝方式,`copyByBuffer`方法是字节流缓冲区拷贝方式。在`main`方法中,分别测试了这两种方式的用时,并输出了结果。
需要注意的是,逐个字节拷贝方式的效率较低,因为每次只能拷贝一个字节,而字节流缓冲区拷贝方式可以一次拷贝多个字节,效率更高。
阅读全文