java把d:\\bbb.mp4复制到当前项目目录下的copy.mp4中 分别用FileInputStream和BufferedInputStream类中的两种read()方法,共四种方式复制并比较效率。
时间: 2024-02-15 18:05:54 浏览: 156
以下是Java复制文件的四种方式,分别使用FileInputStream和BufferedInputStream类中的两种read()方法:
方式一:使用FileInputStream的read()方法逐字节复制文件
```java
import java.io.*;
public class FileCopyDemo1 {
public static void main(String[] args) throws IOException {
long start = System.currentTimeMillis();
FileInputStream fis = new FileInputStream("d:\\bbb.mp4");
FileOutputStream fos = new FileOutputStream("copy.mp4");
int b;
while ((b = fis.read()) != -1) {
fos.write(b);
}
fis.close();
fos.close();
long end = System.currentTimeMillis();
System.out.println("用时:" + (end - start) + "毫秒");
}
}
```
方式二:使用FileInputStream和BufferedInputStream的read()方法读取缓冲区,每次复制1024字节
```java
import java.io.*;
public class FileCopyDemo2 {
public static void main(String[] args) throws IOException {
long start = System.currentTimeMillis();
FileInputStream fis = new FileInputStream("d:\\bbb.mp4");
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream("copy.mp4");
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
bis.close();
fis.close();
fos.close();
long end = System.currentTimeMillis();
System.out.println("用时:" + (end - start) + "毫秒");
}
}
```
方式三:使用FileInputStream和BufferedInputStream的read()方法读取缓冲区,每次复制8192字节
```java
import java.io.*;
public class FileCopyDemo3 {
public static void main(String[] args) throws IOException {
long start = System.currentTimeMillis();
FileInputStream fis = new FileInputStream("d:\\bbb.mp4");
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream("copy.mp4");
byte[] buffer = new byte[8192];
int len;
while ((len = bis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
bis.close();
fis.close();
fos.close();
long end = System.currentTimeMillis();
System.out.println("用时:" + (end - start) + "毫秒");
}
}
```
方式四:使用Files.copy()方法复制文件
```java
import java.io.*;
import java.nio.file.*;
public class FileCopyDemo4 {
public static void main(String[] args) throws IOException {
long start = System.currentTimeMillis();
Path source = Paths.get("d:\\bbb.mp4");
Path target = Paths.get("copy.mp4");
Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);
long end = System.currentTimeMillis();
System.out.println("用时:" + (end - start) + "毫秒");
}
}
```
这里使用Java 8中的Files.copy()方法,可以一行代码完成文件复制操作。
经过测试,第一个方式复制文件最慢,第四个方式复制文件最快。第二和第三个方式的效率相差不大,但是第三个方式复制的字节数更多,因此第三个方式更高效。
阅读全文