import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;
/**
* 将c:\cn目录下的所有.java文件复制到c:\test目录下,并将原来文件的扩展名从.java改为.wl。
* @author wl
* @time 2014.10.05 02:10:23
*
*/
public class CopyFilesFromAToB {
public static void main(String[] args) throws Exception {
MyFilter myFilter=new MyFilter();
File f1=new File("C:\\cn");
File f2=new File("C:\\test");
copyFilesAndReName(f1,f2,myFilter);//将f1目录下以.java结尾的文件复制到目录f2下,并修改其扩展名
}
public static void copyFilesAndReName(File f1,File f2,FilenameFilter myFilter) throws Exception{
List list=new ArrayList();
if(!f1.exists()&&f1.isDirectory()){
throw new RuntimeException("目录不存在");
}
if(!f2.exists()&&f2.isDirectory()){
f2.mkdir();//如果f2不存在就创建一个新的
}
File[] files=f1.listFiles();//列出f1下所有文件
list=recarsive(files,myFilter,list);//遍历files下的所有文件,并将以.java结尾的文件添加到List中;
FileInputStream fis;
FileOutputStream fos;
String filename;
//遍历List中的文件,将其复制到f2,并修改扩展名
for(File file:list){
filename =file.getName().replace(".java", ".wl");
File newfile=new File(f2,filename);
fis=new FileInputStream(file);
fos=new FileOutputStream(newfile);
fileCopy(fis,fos);
fis.close();
fos.close();
}
}
//复制文件内容
private static void fileCopy(FileInputStream fis, FileOutputStream fos) throws Exception {
int len=0;
byte[] buf=new byte[1024];
if((len=fis.read(buf))!=-1){
fos.write(buf, 0, len);
}
}
//递归遍历目录,得到所有以.java结尾的文件的集合list
public static List recarsive(File[] files,FilenameFilter myFilter,List list){
for(File file:files){
if(file.isDirectory()){
recarsive(file.listFiles(),myFilter,list);
}else if(myFilter.accept(file, file.getName())){
list.add(file);
}
}
System.out.println("list.size()"+list.size());
return list;
}
}
//文件过滤器类,过滤所有以.java结尾的文件
class MyFilter implements FilenameFilter{
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
}