文件复制
文件复制,就是将某个文件复制一份到指定路径下。
在Java中,我们可以通过文件输入输出流实现该操作。
原理:从已有文件中读取字节,将该字节写出到另一个文件中。
下面,我以需要将C:\
下的sourceFile.txt
文件复制到D:\
下为例,总结文件复制操作的几个步骤和实现。
文件复制的步骤:
- 创建一个字节输入流对象,构造方法中绑定要读取的数据源(被复制文件)。
- 创建一个字节输出流对象,构造方法中绑定要写入的目的地。
- 使用字节输入流对象中的方法
read
读取文件。 - 使用字节输出流中的方法
write
,把读取到的字节写入目的地文件中。 - 释放资源。
代码实现如下:
public class FileTest {
public static void main(String[] args) throws IOException {
//1.创建一个字节输入流对象
FileInputStream fis = new FileInputStream("C:\\sourceFile.txt");
//2.创建一个字节输出流对象
FileOutputStream fos = new FileOutputStream("D:\\sourceFile.txt");
//data存储字节数据
byte data = 0;
//循环读入字节数据并输出到目标文件中
while((data = fis.read()) != -1){
fos.write(data);
}
//释放资源
fos.close();
fis.close();
}
}
小贴士:
流的关闭原则:先开后关,后开先关。
当然像上面那样每次循环只读入一个字节的数据,效率会异常的底下,所以我们可以引入字节缓存数组,一次读取多个字节的数据,加快文件复制的效率。
public class FileTest {
public static void main(String[] args) throws IOException {
//1.创建一个字节输入流对象
FileInputStream fis = new FileInputStream("C:\\sourceFile.txt");
//2.创建一个字节输出流对象
FileOutputStream fos = new FileOutputStream("D:\\sourceFile.txt");
//字节缓存数组,一次读取1024字节的数据
byte[] bytes = new byte[1024];
//每次读取数据的有效长度
int len = 0;
while((len = fis.read(bytes)) != -1){
fos.write(bytes,0, len);
}
//释放资源
fos.close();
fis.close();
}
}
当然,你还想要更快速的复制文件的话,我们还是有办法嘀。那就是使用字节缓冲输入流BufferedInputStream
和 字节缓冲输出流BufferedOutputStream
。
步骤:
- 创建一个字节缓冲输入流对象,构造方法中传递字节输入流。
- 创建一个字节缓冲输出流对象,构造方法中传递字节输出流。
- 使用字节缓冲输入流对象中的方法
read
读取文件。 - 使用字节缓冲输出流中的方法
write
,把读取到的字节写入内部缓冲区中。 - 释放资源(会先把缓冲区中的数据刷新到内存中)。
public class FileTest {
public static void main(String[] args) throws IOException {
//1.创建一个字节缓冲输入流对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\sourceFile.txt"));
//2.创建一个字节缓冲输出流对象
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\sourceFile.txt"));
//字节缓存数组,一次读取1024字节的数据
byte[] bytes = new byte[1024];
//每次读取数据的有效长度
int len = 0;
while((len = bis.read(bytes)) != -1){
bos.write(bytes,0, len);
}
//释放资源
bos.close();
bis.close();
}
}