package cn.com.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
public class Demo6 {
/**
* 复制多级文件夹里面的文件和空文件夹
* @param args
* @throws IOException
*/
static List<File> list = new ArrayList<>(); //定义一个集合存储文件
public static void main(String[] args) throws IOException {
//源路径
String s = "F:\\test";
String target = "d:\\test"; //目标路径
List<File> li = print(s, target);
copyFile(li, target);
}
public static List<File> print(String file, String target) throws IOException {
File desFile = new File(target);
File srcFile = new File(file);
if (!desFile.exists()) { //创建空的文件夹
desFile.mkdirs();
}
File[] ff = srcFile.listFiles();
if (ff != null) {
for (File fl: ff) {
if (fl.isFile()) { //是文件类型就加进集合
list.add(fl);
}
if (fl.isDirectory()) { //判断是否是文件夹
print(fl.getPath(), target + File.separator + fl.getName()); //递归调用 判断文件里面是否还有文件夹
}
}
}
return list;
}
public static void copyFile(List<File> list, String target) throws IOException {
for (File f: list) { //列出集合中的所有文件
//获取源文件的路径
String s = f.getAbsolutePath();
//把源路径换成给定的路径。 跟据自己所需截取相应的路径
String ss = target.concat(s.substring(s.indexOf("\\", s.indexOf("\\")+1 )));
//在目标盘中生成对应的文件路径
File fi = new File(ss);
if (!fi.getParentFile().exists()) { //创建父路径
fi.getParentFile().mkdirs();
}
InputStream in = new FileInputStream(f);
OutputStream out = new FileOutputStream(fi);
byte[] b = new byte[1024];
int len = 0;
while ((len = in.read(b)) != -1) {
out.write(b, 0, len);
}
in.close();
out.close();
}
}
} |
|