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<File> list=new ArrayList<File>(); 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<File> recarsive(File[] files,FilenameFilter myFilter,List<File> 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"); } }
时间: 2024-10-24 20:02:00