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

	}
}
發佈了1 篇原創文章 · 獲贊 35 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章