问题:
复制文件夹d:/ccjrjava下面所有文件和子文件夹内容到d:/ccjrjava2。
提示:
涉及单个文件复制、目录的创建、递归的使用
代码:
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
public class IO03 {
public static void main(String[] args) {
File yuanWenJian = new File("C:\\Users\\48393\\IdeaProjects\\javaOOP\\IOtest\\src\\homework\\IO03");
File muBiaoWenJian = new File("C:\\Users\\48393\\IdeaProjects\\javaOOP\\IOtest\\src\\homework\\IO03Test");
try {
long start=System.nanoTime();
copyFolder(yuanWenJian, muBiaoWenJian);
long end=System.nanoTime();
double time = (end - start) / 1000000000.0 ; // 将纳秒转换为秒
System.out.println("复制耗时:"+time + "s");
System.out.println("文件夹复制完成!");
} catch (IOException e) {
e.printStackTrace();
}
}
private static void copyFolder(File yuanWenJian, File muBiaoWenJian) throws IOException {
// 如果目标文件夹不存在,则创建它
if (!muBiaoWenJian.exists()) {
muBiaoWenJian.mkdirs();
}
// 获取源文件夹中所有的文件和子文件夹
File[] files = yuanWenJian.listFiles();
// 遍历源文件夹中的每个文件和子文件夹
for (File file : files) {
File newFile = new File(muBiaoWenJian.getAbsolutePath() + File.separator + file.getName());
/*用于创建一个新的File对象,表示目标文件夹路径加上当前文件(或子文件夹)的名称。
1.muBiaoWenJian.getAbsolutePath()是目标文件夹的绝对路径,通过调用getAbsolutePath()方法获取。
2.File.separator是一个与操作系统相关的文件分隔符,它用于在路径中分隔不同的目录层级。
3.将目标文件夹的绝对路径、文件分隔符和当前文件(或子文件夹)的名称连接起来,创建一个新的File对象。
这样,新的File对象就表示了目标文件夹中对应的路径和文件名,用于复制源文件夹中的文件(或子文件夹)到目标文件夹中。*/
if (file.isDirectory()) {
// 若为子文件夹,则递归调用copyFolder()方法复制子文件夹及其内容
copyFolder(file, newFile);
} else {
// 若为文件,则调用copyFile()方法复制文件
copyFile(file, newFile);
}
}
}
private static void copyFile(File source, File destination) throws IOException {
Files.copy(source.toPath(), destination.toPath());//前文到后文
}
}