首页 > 代码库 > java 复制指定后缀名文件并修改其后缀名

java 复制指定后缀名文件并修改其后缀名

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");
	}
}

java 复制指定后缀名文件并修改其后缀名