- package cn.itcast.io.test;
- 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;
- /*
- * 获取指定目录下指定拓展名的文件(包含子目录中的)
- * 将这些文件的绝对路径写入到一个文本文件中。
- *
- * 简单说就是建立一个指定拓展名的文件的列表。
- *
- *
- * 思路:
- * 1.必须进行深度遍历。
- * 2.要在遍历的过程中进行过滤,将符合条件的内容存储到容器中。
- * 3.对容器中的内容进行遍历,并将绝对路径写入到文件中。
- *
- */
- public class Test {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- File dir = new File("e:\\jav0331");
- FilenameFilter filter = new FilenameFilter(){
-
- @Override
- public boolean accept(File dir, String name) {
- // TODO Auto-generated method stub
- return name.endsWith(".java"); //这里函数的参数中传入了一个File对象,而返回值的运算中并没有用到这个对象,那么问题就来了, 参数中传入这个对象是干什么用的?
- }
-
- };
-
- List<File>list = new ArrayList<File>();
-
- getFiles(dir,filter,list);
-
- File destFile = new File(dir,"javalist.txt");
-
- writeToFile(list,destFile);
-
- }
- /**
- * 对指定目录中的内容进行深度遍历,并按照指定过滤器进行过滤。
- * 将过滤后放入内容存储到List中。
- *
- *
- *
- */
-
- public 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);
- }
- }
- }
-
- }
-
-
- public static void writeToFile(List<File>list,File destFile) {
-
- BufferedWriter bufw = null;
-
- try {
- bufw = new BufferedWriter(new FileWriter(destFile));
-
- for(File file : list){
- bufw.write(file.getAbsolutePath());
- bufw.newLine();
- bufw.flush();
- }
-
- } catch (IOException e) {
- throw new RuntimeException("写入失败");
- }finally{
- if(bufw != null)
- try {
- bufw.close();
- } catch (IOException e) {
- throw new RuntimeException("关闭失败") ;
- }
- }
-
-
- }
-
- }
复制代码
小弟不才问题已经写到了代码的注释中 望大神解答啊 |
|