/**
* 場景:彙總某個路徑下的指定格式的文件到一個統一的路徑下,便於統一查看
*
* 需求分析:
* 讀取指定目錄下的文件列表,
* 找出其中符合條件的所有文件,
* 寫入到指定的目標目錄下
*
* 思路:
* 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);
}
}