用FileInputStream和FileOutputStream来实现一个文件移动程序,并测试移动1G文件所需要的时间。
时间: 2024-05-03 18:17:23 浏览: 59
详解FileInputStream读取文件数据的两种方式
可以使用以下代码实现文件移动程序:
```java
import java.io.*;
public class FileMove {
public static void main(String[] args) {
long start = System.currentTimeMillis(); // 记录开始时间
File sourceFile = new File("sourceFile.txt"); // 原文件路径
File destFile = new File("destFile.txt"); // 目标文件路径
try {
FileInputStream fis = new FileInputStream(sourceFile);
FileOutputStream fos = new FileOutputStream(destFile);
byte[] buffer = new byte[1024]; // 缓冲区大小为1KB
int len;
while ((len = fis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
fis.close();
fos.close();
sourceFile.delete(); // 删除原文件
} catch (IOException e) {
e.printStackTrace();
}
long end = System.currentTimeMillis(); // 记录结束时间
System.out.println("移动文件所需时间:" + (end - start) + "ms");
}
}
```
假设要移动的文件大小为1GB,可以使用以下代码测试所需时间:
```java
import java.io.*;
public class TestFileMove {
public static void main(String[] args) {
long start = System.currentTimeMillis(); // 记录开始时间
File sourceFile = new File("sourceFile.txt"); // 原文件路径
File destFile = new File("destFile.txt"); // 目标文件路径
try {
RandomAccessFile raf = new RandomAccessFile(sourceFile, "rw");
raf.setLength(1024L * 1024 * 1024); // 设置文件大小为1GB
raf.close();
FileInputStream fis = new FileInputStream(sourceFile);
FileOutputStream fos = new FileOutputStream(destFile);
byte[] buffer = new byte[1024]; // 缓冲区大小为1KB
int len;
while ((len = fis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
fis.close();
fos.close();
sourceFile.delete(); // 删除原文件
} catch (IOException e) {
e.printStackTrace();
}
long end = System.currentTimeMillis(); // 记录结束时间
System.out.println("移动1GB文件所需时间:" + (end - start) + "ms");
}
}
```
需要注意的是,移动文件所需时间受到多种因素影响,如硬盘读写速度、文件大小、CPU性能等等,因此实际测试结果可能会有所不同。
阅读全文