A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package filestudy;

  2. import java.io.*;
  3. import java.util.*;

  4. public class TestDemo {

  5.         /**
  6.          * @param args
  7. * 获取指定目录下,指定扩展名的文件(包含子目录中的)
  8. * 这些文件的绝对路径写入到一个文本文件中。
  9. * 简单说,就是建立一个指定扩展名的文件的列表。
  10. *
  11. * 思路:
  12. * 1,必须进行深度遍历。
  13. * 2,要在遍历的过程中进行过滤。将符合条件的内容都存储到容器中。
  14. * 3,对容器中的内容进行遍历并将绝对路径写入到文件中。
  15.          */
  16.         public static void main(String[] args)throws IOException {
  17.                 // TODO Auto-generated method stub
  18.                 File dir=new File("d:\\workspace");
  19.                 FilenameFilter filter=new FilenameFilter(){
  20.                                 public boolean accept(File dir,String name){
  21.                                         return name.endsWith(".java");
  22.                                 }
  23.                 };
  24.                 List<File> list=new ArrayList<File>();
  25.                 getList(dir,filter,list);
  26.                 File file=new File(dir,"javalist.txt");
  27.                 writeFile(file,list);
  28.         }
  29. public static void getList(File dir,FilenameFilter filter,List<File> list) throws IOException{
  30.         File[] files=dir.listFiles();
  31.         //此处为什么没有进行循环,这是个问题。
  32.         for(File file:files){
  33.                 if(file.isDirectory())
  34.                         getList(file,filter,list);
  35.                 else{
  36.                         if(filter.accept(file,file.getName())){;
  37.                         list.add(file);
  38.                         }
  39.                 }
  40.         }
  41. }
  42. public static void writeFile(File file,List<File> list) throws IOException{
  43.         BufferedWriter bufw=null;
  44.         //此处为什么要再一次进行异常处理,这是个问题。
  45.         try{
  46.         bufw=new BufferedWriter(new FileWriter(file));
  47.         for(File f:list){
  48.                 bufw.write(f.getAbsolutePath());
  49.                 bufw.newLine();
  50.                 bufw.flush();       
  51.         }
  52.         }
  53.         catch(IOException e){
  54.                 throw new RuntimeException("write fail");
  55.         }
  56.         finally{
  57.                 try{
  58.                         if(bufw!=null)
  59.                         bufw.close();
  60.                 }
  61.                 catch(IOException e){
  62.                         throw new RuntimeException("close fail");
  63.                 }
  64.         }
  65.        
  66.                
  67.                
  68.         }
  69. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

1 个回复

倒序浏览
33行, 将dir目录下的所有文件的路径名存入File[]数组中
35行, 遍历file数组, 再进行判断, 如果是文件夹, 就递归, 继续判断, 如果是文件就直接添加到list集合中
//
47行的异常处理, 是关流的异常处理, 在1.6版本之前,需要这样写,而且很麻烦, 在1.6之后就不需要这样了, 因为流这个类都实现了Closeable 这个接口,
    只需要try(创建的流) {与流相关的代码}  这样就不需要关流了,也不需要异常处理了,建议楼主这样做, 可能你看的视频比较老了吧

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马