packagecom.swift.test;importjava.io.File;importjava.io.FileFilter;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.Scanner;/*从控制台获取输入的文件目录然后将该目录(包含子目录)下的.java文件复制到e:/abc文件夹中,
并统计java文件的个数.
提示:如果有相同的名称的文件,如果两个Test01.java,则拷贝到目标文件夹时只能有一个Test01.java,
另一个Test01.java要修改为另一个名称:该名称可随机生成,只要不重复即可.*/
public classCopyJavaFileCount {private static int sum=0;public static void main(String[] args) throwsIOException {
Scanner scan=newScanner(System.in);
String path=scan.nextLine();
File src=newFile(path);
File dest=new File("d:/asdf");if(!dest.exists()) {
dest.mkdirs();
}
copy(src,dest);
System.out.println(".java文件的个数是"+sum);
}private static void copy(File src, File dest) throwsIOException {
File[] files= src.listFiles(newFileFilter() {
@Overridepublic booleanaccept(File pathname) {if(pathname.isDirectory()) {try{
copy(pathname,dest);
}catch(IOException e) {
e.printStackTrace();
}
}if(pathname.getName().toLowerCase().endsWith(".java")) {return true;
}return false;
}
});for(File file:files) {
String name=file.getName();
File destFile=newFile(dest,name);
copyFile(file,destFile);
System.out.println(file);
}
sum=sum+files.length;
}public static void copyFile(File file1,File file2) throwsIOException{
FileInputStream fis=newFileInputStream(file1);//2.创建字节输出流对象关联文件路径:D盘下的a.png
FileOutputStream fos=newFileOutputStream(file2);//3.定义一个字节数组,用来存放读取到文件字节数
byte[] buf=new byte[128];intlen;//4.使用循环不断从字节输入流读取一个字节数组,每读取一个字节数组就利用输出流写出一个字节数组。
while((len=fis.read(buf))!=-1) {
fos.write(buf,0,len);
}
System.out.println("已经copy成功");//5.关闭流,释放资源
fis.close();
fos.close();
}
}