package cn.itcast.io.file.getlist;
//import java.awt.List;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileFilter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class GetCertainListDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
/**
* 联系:将指定目录中的所有java文件(包含子目录)的绝对路径写入到指定的java文件中 思路: 1、对指定的目录进行遍历,包含子目录的边路
* 2、在遍历中加入过滤器 3、将满足过滤器的文件进行临时存储 4、将存储的数据的指定的信息,比如绝对路径写入到指定文件中去
*/
File dir = new File("F:\\教学视频\\Java\\Java基础班_2013年4月\\day11_avi");
// 创建一个文件过滤器,可以过滤指定后缀名的文件
FileFilter filter = new FileFilterBySuffix(".avi");
// 创建一个集合,用于存储符合过滤条件的文件
List list = new ArrayList();
// 定义一个方法,用于对指定的目录进行遍历,并传入指定的过滤器和临时容器
listAllFiles(dir, filter, list);
System.out.println(list.size());
// 1、创建一个用于存储java文件路径的文件
File file = new File(dir, "avi.txt");
writeToFile(list, file);
}
/**
* 将list中存储的File对象的指定的信息写入到文件中
* @param list
* @param file
* @throws IOException
*/
private static void writeToFile(List list, File file) {
// TODO Auto-generated method stub
BufferedWriter bufw = null;
try {
// 1、既然要将文本数据写入到一个文件中,就需要使用io技术
bufw = new BufferedWriter(new FileWriter(file, true));
// 1、对list集合进行遍历
for (File f : list) {
bufw.write(f.getAbsolutePath());
bufw.newLine();
bufw.flush();
}
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
} finally {
if (bufw != null) {
try {
bufw.close();
} catch (Exception e2) {
// TODO: handle exception
throw new RuntimeException("关闭");
}
}
}
}
/**
* 在遍历之后,将满足条件的file存储到临时容器中
*
* @param dir
* @param filter
* @param list
*/
private static void listAllFiles(File dir, FileFilter filter,
List list) {
// TODO Auto-generated method stub
// 对指定的目录进行遍历
File[] files = dir.listFiles();
for (File file : files) {
// 如果是目录,进行递归
if (file.isDirectory()) {
listAllFiles(dir, filter, list);
} else {
// 如果是文件,就将文件传递给过滤器进行过滤
if (filter.accept(file)) {
list.add(file);
}
}
}
}
}