获取指定目录下,指定扩展名的文件(包含子目录中的),把这些文件的绝对路径写入到一个文本文件中。
题目:
获取指定目录下,指定扩展名的文件(包含子目录中的),把这些文件的绝对路径写入到一个文本文件中。
思路:
1.必须深度遍历
2.要在遍历的过程中进行过滤,将符合条件的内容存储到容器中
3.对容器中的内容进行遍历并将绝对路径写入到文件中
代码:
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 Test3 {
public static void main(String[] args) {
File dir=new File("d:\\aa");
//深度遍历的目录
//filter:过滤器
//list:容器,存放符合条件的file对象
FilenameFilter filter=new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
};
List<File> list=new ArrayList<File>();
getFiles(dir,filter,list);
File destFile=new File(dir,"javalist.txt");
//从list中获取文对象,放到文件中
write2File(list,destFile);
}
private static void write2File(List<File> list, File destFile) {
BufferedWriter bw=null;
try {
bw=new BufferedWriter(new FileWriter(destFile));
for(File file:list){
bw.write(file.getAbsolutePath());
bw.newLine();
bw.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//释放资源的代码
if(bw!=null){
try {
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
private static void getFiles(File dir, FilenameFilter filter, List<File> list) {
File[] files=dir.listFiles();
for(File file:files){
if(file.isDirectory()){
//如果是目录,则递归
getFiles(file, filter, list);
}else{
//文件
//过滤文件:将符合条件的file对象存储到list集合中
if(filter.accept(dir, file.getName())){
list.add(file);
}
}
}
}
}
在指定的目录下生成了一个javalist.txt文本文件,文档中的内容为: