多级文件夹复制
思路:
使用递归算法
使用字节流读入写出
代码如下:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class FolderCopy {
public static void main(String[] args) {
//给出要被复制的文件夹的绝对路径
File dir = new File("F:/apache_jar包/apache-tomcat-7.0.77");
//给出复制到的文件夹
File target = new File("E:/");
FolderCopy.copyDir(dir, target);
}
/**
* 递归方法
* @param srcDir 要被复制的文件夹
* @param targetDir 被复制的文件夹 复制到的地方
*/
public static void copyDir(File srcDir , File targetDir){
String dirName = srcDir.getName();
File dirNew = new File(targetDir, dirName);//E:/apache-tomcat-7.0.77
if (!dirNew.exists()) {
dirNew.mkdir();
}
File[] files = srcDir.listFiles();//F:/apache_jar包/apache-tomcat-7.0.77/第一级别的所有子文件和子文件夹
for (File file : files) {
if (file.isDirectory()) {
copyDir(file, dirNew);//递归
}else{
//流的读取和写出
copyFile(file,dirNew);
}
}
}
/**
* 使用字节流读入写出
* @param file 要复制的文件
* @param dirNew 要复制到的文件夹
*/
private static void copyFile(File file, File dirNew) {
try (InputStream is = new FileInputStream(file);
OutputStream os = new FileOutputStream(new File(dirNew, file.getName()));){
byte[] bs = new byte[1024*4];
int len = -1;
while((len = is.read(bs))!=-1){
os.write(bs, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}