代码如下:
import java.io.*;
public class Test07 {
public static void main(String[] args) {
File file1 = new File("d:\\aa");//源文件(绝对路径)
File destFile = new File("aa");//目标文件(相对路径)
copyFiles(file1,destFile);//调用方法
}
//定义方法复制源文件中的所有内容到目标文件中,参数为:源文件,目标文件
public static void copyFiles(File file1, File file2) {
if (file1.exists()) {//如果文件存在
if (file2.isFile()) {
System.out.println("目标文件必须是目录");
}else {
file2.mkdirs();//创建目标文件目录
File[] fileList = file1.listFiles();//源文件集合
String[] fileNames = file1.list();//源文件名字集合
//遍历集合
for (int i = 0; i < fileList.length; i++) {
if (fileList[i].isDirectory()) {//如果是目录
File[] files2 = fileList[i].listFiles();
File fileDest = new File(file2, fileNames[i]);//创建目标目录
fileDest.mkdirs();//创建目录
copyFiles(fileList[i],fileDest);//递归
}else {//如果是文件,那么就创建输入流和输出流复制文件中的全部内容
File destFile = new File(file2, fileNames[i]);//创建同名的文件
try {
destFile.createNewFile();
try (Reader in = new FileReader(fileList[i]);
Writer out = new FileWriter(destFile,true)//追加写入
) {
//一次复制一个字符数组
char[] charArr = new char[1024 * 1024];
int len =0;
while ((len = in.read(charArr)) != -1) {
out.write(charArr,0,len);//将所有读取的字符输出
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
} else {//文件不存在
System.out.println("源文件不存在!!!");
}
System.out.println("复制完成!!!");
}
}