package cpFile;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class CpFile {
public static void main(String[] args) throws Exception {
//存储文件路径,true 代表 可追加
BufferedWriter out1 = new BufferedWriter(new FileWriter("C:\\Users\\Administrator\\Desktop\\zerok (1)\\xx.txt",true));
//读取文件路径
String pre="C:\\Users\\Administrator\\Desktop\\GitHub\\";
//读取文件后缀名
String suffix="Impl.java";
//统计复制文件数量
int count=0;
//true 获取存储文件目录下所有存在文件的文件夹全路径,false 获取存储文件路径下所有文件全路径(true的子文件),
ArrayList<String> path = getDirPath(new File[]{new File(pre)},false,suffix);
System.out.println("copy starting......");
//遍历路径,进行复制
for(String txtName:path){
//读取路径文件,"utf-8"防止中文乱码
BufferedReader buf = new BufferedReader(new InputStreamReader(new FileInputStream (txtName),"utf-8"));
//按行读取
String str = null;
while((str=buf.readLine())!=null){
//换行
out1.newLine();
//写入数据
out1.append(str);
}
System.out.println("copy \""+new File(txtName).getName()+"\" successed!");
count++;
buf.close();
}
out1.close();
System.out.println("copy ending......");
System.out.println("Files:"+count);
}
//获取最后一层文件夹,sign true获取最后一层文件夹,false 获取所有文件
public static ArrayList<String> getDirPath(File[] files,Boolean sign,String suffix){
ArrayList<String> fs=new ArrayList<String>();
for(File f:files){
if(f.isDirectory())
fs.addAll(getDirPath(f.listFiles(),sign,suffix));
else{
if(sign){
if(!fs.contains(f.getParent()))
if(endWithCh(f,suffix))
fs.add(f.getParent());
}else{
if(!fs.contains(f.getPath()))
if(endWithCh(f,suffix))
fs.add(f.getPath());
}
}
}
return fs;
}
//以。。。结尾,"",或者null,默认无后缀名
public static Boolean endWithCh(File file,String suffix){
if(suffix==""||suffix==null) return true;
if(file.getName().endsWith(suffix))
return true;
else
return false;
}
}