思路:
第一步,需要DFS找到源目录下的所有文件及目录;
第二步,复制文件内容。
难点:
第一步的难点是File对象的使用,因为在递归过程中需要使用到File对象的多种方法,如isFile(),,isDirectory(),,getAbsolutePath(),,getName(),,,,等等;
第二步的难点是流的应用,包括输入流和输出流。由于不知道待复制文件的具体内容,故最好使用字节流来操作。
package file;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
File dir = new File("F:\\cyhJavaWorkSpace\\ProjB");
File dir2 = new File("E:\\fileMoveTest");
dir2.mkdir();
dfs(dir, 0, dir2);
}
private static void dfs(File dir, int tab, File dir2) {
File[] files = dir.listFiles();
for(File f : files) {
printTab(tab);
System.out.println(f.getName());
if(f.isDirectory()) {
File dir2new = new File(dir2.getAbsolutePath()+"\\"+f.getName());
dir2new.mkdir();
dfs(new File(f.getAbsolutePath()), tab+2, dir2new);
} else {
File fnew = new File(dir2.getAbsolutePath()+"\\"+f.getName());
try {
fnew.createNewFile();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fnew));
int x;
while((x = bis.read()) != -1) {
bos.write(x);
}
bos.flush();
bos.close();
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static void printTab(int tab) {
for(int e=1; e <= tab; e++) {
System.out.print(' ');;
}
}
}