Java文件拷贝
代码实现
package com.makefullstack.myio.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyFilesTest {
public static void main(String[] MakeFullStack) throws IOException {
// 练习一:拷贝文件夹
// 1. 创建数据源以及目的地
File Src = new File("E:\\src");
File Liu = new File("E:\\Liu");
handleCopyFile(Src, Liu);
}
/**
* 文件拷贝
* @param Src 数据源
* @param Liu 目的地
*/
private static void handleCopyFile(File Src, File Liu) throws IOException {
boolean mkdir = Liu.mkdir();
if (mkdir) {
System.out.println(Liu + "文件夹创建成功!");
} else {
System.out.println(Liu + "文件夹已经存在!");
}
// 1. 获取数据源
File[] files = Src.listFiles();
// 2. 遍历数据源,对文件进行读写。
if (files != null) {
for (File file : files) {
// is File
if (file.isFile()) {
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(new File(Liu, file.getName()));
byte[] bytes = new byte[1024 * 1024 * 10];
int length;
while (( length = fis.read(bytes)) != -1 ) {
fos.write(bytes, 0, length);
}
fos.close();
fis.close();
} else {
// not File
handleCopyFile(file, new File(Liu, file.getName()));
}
}
}
System.out.println(Src + "文件夹拷贝完毕");
}
}
代码块的执行原理:
main 方法:
public static void main(String[] MakeFullStack) throws IOException:这是程序的入口方法,其中 String[] MakeFullStack 是命令行参数。
- 首先,在 main 方法中创建了两个 File 对象,分别表示源文件夹和目标文件夹。Src 对象表示源文件夹,路径为 “E:\src”;Liu 对象表示目标文件夹,路径为 “E:\Liu”。
- 然后,调用 handleCopyFile(Src, Liu) 方法,将源文件夹和目标文件夹传递给这个方法进行文件拷贝。
handleCopyFile 方法:
private static void handleCopyFile(File Src, File Liu) throws IOException:这是一个私有静态方法,用于执行文件夹拷贝操作。
- 该方法接收两个参数,分别是源文件夹和目标文件夹。
- 首先,调用 Liu.mkdir() 方法尝试在目标路径创建文件夹。如果文件夹创建成功,则输出文件夹创建成功的消息,否则输出文件夹已经存在的消息。
- 接着,通过 Src.listFiles() 方法获取源文件夹中的所有文件和子文件夹,并存储在 files 数组中。
- 遍历 files 数组,对每一个文件或子文件夹进行处理:
-
- 如果是文件,则使用 FileInputStream 和 FileOutputStream 将文件从源文件夹拷贝到目标文件夹中。
-
- 如果是子文件夹,则递归调用 handleCopyFile 方法,将子文件夹作为源文件夹,继续进行拷贝操作。
- 最后,输出源文件夹拷贝完毕的消息。
这样,整个程序就完成了文件夹的拷贝操作。它首先创建目标文件夹,然后递归地将源文件夹中的所有文件和子文件夹拷贝到目标文件夹中,直到所有文件都被拷贝完成。