1.复制目录,要求:
a. 复制目录及其所有子目录,保证在复制的目标目录中,目录结构和原目录相同
b. 同时,对于原目录及其子目录,只将原目录中的指定类型的.java文件,
package com.syj.exercise;
import java.io.*;
/*分析
1. 选 字节流
目录下的文件可能是 字符, 也可能是二进制文件,所以 应选用 字节流 而非 字符流
2. 构造一个文件复制方法copyFile()
3. 遍历目录列表,
若是 文件,则调用 copyFile(),
若是 目录,则递归调用自己,复制子目录
* */
public class homework {
public static void main(String[] args) throws IOException {
//先在控制台上显示 源目录
File srcfile = new File("E:\\dir");
System.out.println("源目录:");
print(srcfile);
//实现目录复制
copyDir("E:\\dir","D:\\dir");
//mian()方法按顺序执行,此时 可在控制台上输出 复制好的目录
File destfile = new File("D:\\dir");
System.out.println("-----------------------------");
System.out.println("复制后的目录:");
print(destfile);
}
//复制文件
public static void copyFile(String srcFile,String destFile) throws IOException {
FileInputStream in = new FileInputStream(srcFile);
FileOutputStream out = new FileOutputStream(destFile);
byte[] buffer = new byte[1024];
int length ;
while ((length = in.read(buffer)) != -1){
out.write(buffer,0,length);
}
in.close();
out.close();
}
//复制目录
public static void copyDir(String fromDir , String toDir ) throws IOException {
File srcDir = new File(fromDir);
File destDir = new File(toDir);
//判断源目录是否是同一个目录
if(! srcDir.isDirectory()){
return;
}
if(!destDir.exists()){
destDir.mkdirs();
}
//遍历源目录
File[] srcDirList = srcDir.listFiles();
for(int i = 0 ; i < srcDirList.length ; i++){
if(srcDirList[i].isDirectory()){
copyDir(fromDir +File.separator + srcDirList[i].getName(),
toDir + File.separator +srcDirList[i].getName());
}
if(srcDirList[i].isFile() && srcDirList[i].getName().endsWith(".java")){
copyFile(fromDir +File.separator+ srcDirList[i].getName(),
toDir +File.separator+ srcDirList[i].getName());
}
}
}
//在控制台上输出srcdir 和 destdir
public static void print(File file) {
if (file.isFile())
System.out.println(" " + file.getName());
else if (file.isDirectory()) {
System.out.println(file.getName());
File[] files = file.listFiles();
for (File file1 : files) {
System.out.print(" ");
print(file1);
}
}
}
}
运行结果截图