java把d:\\bbb.mp4复制到当前项目目录下的copy.mp4中 分别用FileInputStream和BufferedInputStream类中的两种read()方法,共四种方式复制并比较效率。
时间: 2023-11-27 17:51:14 浏览: 64
java复制文件的4种方式
好的,我可以给你提供代码实现,不过需要注意的是,尽管这里只是本地文件复制,但是在实际开发中,为了避免IO阻塞,最好使用多线程或者异步IO实现。
以下是使用`FileInputStream`类的两种read()方法完成复制的代码实现:
```java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileCopyDemo {
public static void main(String[] args) {
String sourceFilePath = "d:\\bbb.mp4";
String targetFilePath = "copy.mp4";
// 使用FileInputStream的read(byte[] b)方法复制
long start1 = System.currentTimeMillis();
try (FileInputStream fis = new FileInputStream(new File(sourceFilePath));
FileOutputStream fos = new FileOutputStream(new File(targetFilePath))) {
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
long end1 = System.currentTimeMillis();
System.out.println("使用FileInputStream的read(byte[] b)方法复制耗时:" + (end1 - start1) + "ms");
// 使用FileInputStream的read()方法复制
long start2 = System.currentTimeMillis();
try (FileInputStream fis = new FileInputStream(new File(sourceFilePath));
FileOutputStream fos = new FileOutputStream(new File(targetFilePath))) {
int b;
while ((b = fis.read()) != -1) {
fos.write(b);
}
} catch (IOException e) {
e.printStackTrace();
}
long end2 = System.currentTimeMillis();
System.out.println("使用FileInputStream的read()方法复制耗时:" + (end2 - start2) + "ms");
}
}
```
以下是使用`BufferedInputStream`类的两种read()方法完成复制的代码实现:
```java
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileCopyDemo {
public static void main(String[] args) {
String sourceFilePath = "d:\\bbb.mp4";
String targetFilePath = "copy.mp4";
// 使用BufferedInputStream的read(byte[] b)方法复制
long start1 = System.currentTimeMillis();
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File(sourceFilePath)));
FileOutputStream fos = new FileOutputStream(new File(targetFilePath))) {
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
long end1 = System.currentTimeMillis();
System.out.println("使用BufferedInputStream的read(byte[] b)方法复制耗时:" + (end1 - start1) + "ms");
// 使用BufferedInputStream的read()方法复制
long start2 = System.currentTimeMillis();
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File(sourceFilePath)));
FileOutputStream fos = new FileOutputStream(new File(targetFilePath))) {
int b;
while ((b = bis.read()) != -1) {
fos.write(b);
}
} catch (IOException e) {
e.printStackTrace();
}
long end2 = System.currentTimeMillis();
System.out.println("使用BufferedInputStream的read()方法复制耗时:" + (end2 - start2) + "ms");
}
}
```
以上四种方式都可以完成文件复制,但是效率可能略有差异。你可以自己运行代码测试并比较。
阅读全文