/**
* 场景:汇总某个路径下的指定格式的文件到一个统一的路径下,便于统一查看
*
* 需求分析:
* 读取指定目录下的文件列表,
* 找出其中符合条件的所有文件,
* 写入到指定的目标目录下
*
* 思路:
* 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);
}
}