1.先判断要复制的文件是文件夹还是文件,如果是文件,就进行复制,如果是文件夹,就进行下一层的循环,运用递归的特性,将所有的文件进行复制。
2.存在问题,相对来说,使用字符流来进行复制有缺陷,在复制的过程中,对于复制的图片啊,ppt什么的文件会有损害,可能不能打开,所以在这里我只用字节流在进行复制的交替。
//复制整个文件夹
public class DemoAllFile {
/**
* 将 源文件 复制到目标文件中
* @param files
* @param fileCopy
*/
public static void copyAllFiles(File files, File fileCopy) {
try {
//判断是否是文件
if (files.isDirectory()) {
// 如果不存在,创建文件夹
if (!fileCopy.exists()) {
fileCopy.mkdir();
}
// 将文件夹下的文件存入文件数组
String[] fs = files.list();
for (String f : fs) {
//创建文件夹下的子目录
File srcFile = new File(files, f);
File destFile = new File(fileCopy, f);
// 将文件进行下一层循环
copyAllFiles(srcFile, destFile);
}
} else {
// 创建文件输入的字节流用于读取文件内容,源文件
FileInputStream fis = new FileInputStream(files);
// 创建文件输出的字节流,用于将读取到的问件内容写到另一个磁盘文件中,目标文件
FileOutputStream os = new FileOutputStream(fileCopy);
// 创建字符串,用于缓冲
int len = -1;
byte[] b = new byte[1024];
while (true) {
// 从文件输入流中读取数据。每执行一次,数据读到字节数组b中
len = fis.read(b, 0, 256);
if (len == -1) {
break;
}
System.out.println(b.toString());
os.write(b);
}
os.write("\r\n".getBytes()); // 换行
fis.close();
os.close();
}
} catch (IOException e) {
System.out.println("跳过");
}
}
public static void main(String[] args) {
copyAllFiles(new File("srcFile"),new File("copyFile"));
}
}