指定されたディレクトリに指定されたサフィックスを持つファイルをコピーし、サフィックスを変更します

package cn.itcast_04;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;

/*
 * 
 * 需求:复制指定目录下指定后缀名的文件并修改后缀名
 * 指定的文件是:.java文件
 * 指定的后缀名是:.jpg
 * 指定的目录是:text
 * 
 * 数据源:E:\\dome\\2.java
 * 目的地:E:\\text\\2.jpg
 * 
 * 分析;
 *      A:封装目录
 *      B:获取该文件夹下的Java文本的File数组
 *      C:遍历该数组,得到每一个对象
 *      D;把该File复制
 *      E:在目的地目录下改名
 * 
 */
public class 复制指定目录下指定后缀名的文件并修改后缀名 {
    
    

	public static void main(String[] args) throws IOException {
    
    
		//封装目录
		File scrFolder = new File("E:\\dome");
		//封装目的地
		File desFoler = new File ("E:\\text");
		
		//如果没有文件夹,就创建
		if(desFoler.exists()) {
    
    
			desFoler.mkdirs();
		}
        
		
		//获取该目录下的Java文件的File数组
		File[] fileArray = scrFolder.listFiles(new FilenameFilter() {
    
    
			
			@Override
			public boolean accept(File dir, String name) {
    
    
				return new File(dir,name).isFile() && name.endsWith(".java");
			}
		});
		
		//遍历File数组,得到每一个File对象
		for(File file: fileArray) {
    
    
			//System.out.println(file);
			//数据源:E:\dome\2.java
			//目的地:E:\\text\2.jpg
			String name = file.getName();
			//System.out.println(name);//2.java
			File newFile = new File(desFoler,name);
			copy(file,newFile);
		}
		//在目的地目录下改文件名
		File[] desFileArray = desFoler.listFiles();
		for(File file:desFileArray) {
    
    
			//System.out.println(file);
			//E:\\text\\1.java
			String name = file.getName();//1.java
			String newName = name.replaceAll(".java", ".jpg");//1.jpg
			//路径相同才改名
			//路径不同是剪切
			File newFile = new File(desFoler,newName);
			file.renameTo(newFile);
            //file为E:\\text\\1.java
			//newFile为E:\\text\\1.jpg
		}
	}

	private static void copy(File file, File newFile) throws IOException {
    
    
		BufferedInputStream  bi = new BufferedInputStream(
				new FileInputStream(file));
		BufferedOutputStream  bo = new BufferedOutputStream(
				new FileOutputStream(newFile));
		
		byte[] by = new byte[1024];
		int len = 0;
		while((len = bi.read(by)) != -1) {
    
    
			bo.write(by,0,len);
		}
		bo.close();	
	}
}

おすすめ

転載: blog.csdn.net/kaszxc/article/details/108686681