io流实现指定目录下指定格式文件的导出到指定文件夹

/**
     * 场景:汇总某个路径下的指定格式的文件到一个统一的路径下,便于统一查看
     * 
     * 需求分析:
     *     读取指定目录下的文件列表,
     *     找出其中符合条件的所有文件,
     *     写入到指定的目标目录下
     * 
     * 思路:
     *  1.文件有深度,必须进行深度遍历
     *  2.遍历的过程中过滤符合条件的文件路径存储到容器中
     *  3.对容器中的路径进行遍历,获取文件名,并封装成文件,
     *  4.读取文件并写入到目标路径下
     * 
     */

1.包结构

2.定义文件读写操作的类PickUpFile

package java_Studing_day51_IO_fileExtraction;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class PickUpFile {
	/**
	 * 获取所有文件
	 * @param dir 指定的文件获取目录
	 * @param filter  自定义的文件格式过滤器
	 * @param list	list容器
	 */
	public  void getFile(File dir,FilenameFilter filter,List<String> list){
		//获取目录列表
		File[] files=dir.listFiles();
		//深度遍历
		for(File file:files){
			//判断是否为文件夹
			if(file.isDirectory()){
				//递归
				getFile(file,filter,list);
			}else{
				//不是文件夹就是文件,用格式过滤器筛选
				if(filter.accept(dir, file.getName())){
					//添加结果到容器
					list.add(file.getAbsolutePath());
				}
			}
		}
	}

	/**
	 * 写入到指定目录
	 * @param list 文件路径列表
	 * @param TargetFile 目标路径
	 * @throws IOException
	 */
	public  void writeToFile(List<String> list,File TargetFile) throws IOException {
		int cont=1;
		//遍历列表
		for(String file:list){

			String fileName=new File(file).getName();  
			//输入流
			FileInputStream fis=new FileInputStream (new File(file));
			//输出流
			FileOutputStream fos=new FileOutputStream(new File(TargetFile,(cont)+fileName+".doc"));

			//读写操作
			int len=0;
			byte[]buf=new byte[1024];
			while((len=fis.read(buf))!=-1) {

				fos.write(buf, 0, len);
				fos.flush();	   
			}	    		
			cont++;
			fis.close();
			fos.close();
			System.out.println((cont)+"-"+fileName+".doc"+"读写完成.....");
		}

	}
}

3.定义一个自定义格式过滤器MyFilter

package java_Studing_day51_IO_fileExtraction;

import java.io.File;
import java.io.FilenameFilter;

public class MyFilter implements FilenameFilter {

	private String endWith;
	
	MyFilter(String endWith){
		this.endWith=endWith;
	}
	
	@Override
	public boolean accept(File dir, String endWith) {
		endWith=this.endWith;
		//返回endWith结尾的文件
		return endWith.endsWith(endWith);
	}

}

4.创建执行类Main,运行

package java_Studing_day51_IO_fileExtraction;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Main {
		
	public static void main(String[] args) throws IOException {
		
		//指定要读取目录或者盘符  
		File dir=new File("F://BaiduNetdiskDownload/java高级篇/");
		//指定要写入的目录或者盘符
		File TargetFile=new File("F://java学习之路/javastudy/提高篇文档");		
		if(!TargetFile.exists())
		TargetFile.mkdir();		
		//描述一个过滤器
		FilenameFilter filter=new MyFilter(".doc");		
		//定义一个容器
		List<String> fileNamelist=new ArrayList<String>();
		
		//遍历指定目录下的文件
		PickUpFile puf=new PickUpFile();
		puf.getFile(dir,filter,fileNamelist);
		//写入到指定目录		
		puf.writeToFile(fileNamelist,TargetFile);

	}
}

猜你喜欢

转载自blog.csdn.net/weixin_38023579/article/details/81169622