虽然这篇笔记涉及的主要是文件的操作,但是是在做的利用Jsoup解析文档小任务的一部分,所以也放在一起,借鉴了帖子上的源码,做了一些改动,下一篇笔记是基于本篇的进一步改进!
实例如下:
package com.daxiang.filenamefilter;
/**
* File类操作文件综合应用
* 需求:获取指定目录下面,指定扩展名(.saz)的文件,将文件的绝对路径写到文本文件当中,
* 并在对应的文件夹下生成同名的csv文件。
*
* 思路:
* 1.需要深度遍历----递归
* 2.遍历的过程中过滤指定扩展名的文件--过滤器FileNameFilter,将文件存入容器中
* 3.将容器中的内容遍历,写入到指定的txt文件中
* 4.并在对应的文件夹下生成同名的csv文件
*
*/
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class FileNameFilterWriteFile {
public static void main(String[] args) {
File dir = new File("D:\\daxiang\\saztest");
FilenameFilter filter = new FilterBySaz(".saz");// 过滤.saz文件
List<File> fileList = new ArrayList<File>();
getFileList(dir, filter, fileList);
File desFile = new File(dir, "FileList.txt");
write2File(fileList, desFile);
}
/**
* @param dir 需要遍历的目录
* @param filter 过滤满足条件的文件
* @param fileList 存放符合条件的容器
*/
public static void getFileList(File dir, FilenameFilter filter,
List<File> fileList) {
if (dir.exists()) {
File[] files = dir.listFiles();// 找到目录下面的所有文件
for (File file : files) {
// 递归
if (file.isDirectory()) {
getFileList(file, filter, fileList);
} else {
// 对遍历的文件进行过滤,符合条件的放入List集合中
if (filter.accept(dir, file.getName())) {
fileList.add(file);
try {
String path1 = file.getAbsolutePath();
System.out.println(path1);
String path2 = file.getParent();
System.out.println(path2);
File csvfile = new File((file.getParent() + File.separator
+ file.getName().replace("saz", "csv")));
csvfile.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
/**
* 将容器中的文件遍历,写入到目的文件中
*
* @param list 存放满足条件的文件的集合
* @param desFile 要写入的目的文件
*/
public static void write2File(List<File> fileList, File desFile) {
BufferedWriter bw = null;
try {
// 使用字符流写入到目的文件中
bw = new BufferedWriter(new FileWriter(desFile));
// 遍历List集合
for (File file : fileList) {
bw.write(file.getAbsolutePath());// 写入目的文件绝对路径
bw.newLine();
bw.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bw != null) {
bw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package com.daxiang.filenamefilter;
/**
* File类操作文件综合应用
* 需求:获取指定目录下面,指定扩展名的文件,将文件的绝对路径写到文本文件当中。
*
* 说明:
* 自定义FilterBySaz类,过滤指定扩展名的文件
*
*/
import java.io.File;
import java.io.FilenameFilter;
public class FilterBySaz implements FilenameFilter{
private String ext;
public FilterBySaz(String ext) {
this.ext = ext;
}
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
return name.endsWith(ext);
}
}
所遍历的文件夹结构如下图所示,其中只有144P-1080P这6个文件夹中包含saz格式的文件,其他文件夹都没有
程序执行完之后的效果如下图所示: