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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. public static void listAll(File f) {
  2. System.out.println(f.getAbsolutePath());
  3. File[] file = f.listFiles(new FileFilterByName(".txt"));
  4. for (int i=0;i<file.length;i++) {
  5. if(file[i].isDirectory())
  6. listAll(file[i]);
  7. else
  8. System.out.println(file[i].getAbsolutePath());
  9. }
  10. <span style="line-height: 1.5;">}</span>
复制代码
上次代码中,在listFiles中我已经传入了一个文件过滤器,过滤器中的方法是返回以".txt"的文件,但是我打印出来的结果只有当前目录下的txt文件,子目录下的txt文件不能打印出来,我这边已经对文件进行递归了啊,求指导....

2 个回复

倒序浏览
疑问与错误:
1、你所用的FileFilterByName类,我未查找到,请问是自己写的吗?
2、File[] file = f.listFiles(new FileFilterByName(".txt"));这句代码会让后面遍历时,子目录也会被排除在外,因为子目录的后缀不是“.txt”;
这是我实现相同功能的代码,请参考:
  1. import java.io.File;
  2. import java.io.FileFilter;

  3. class Test
  4. {
  5.      public static void main(String[] args)
  6.      {
  7.          File file=new File("C:\\Test");
  8.          FileFilter filter=new FileFilter(){
  9.                  @Override
  10.                 public boolean accept(File pathname) {
  11.                         return pathname.getName().endsWith(".txt");
  12.                 }
  13.          };
  14.          listAll(file,filter,0);
  15.       }
  16.      public static void listAll(File dir,FileFilter filter,int level) {
  17.              System.out.println(getLevel(level)+dir.getName());
  18.              level++;
  19.              File[] files = dir.listFiles();
  20.              for (File file : files) {
  21.                         if(file.isDirectory())
  22.                                 listAll(file,filter,level);
  23.                         else{
  24.                                 if(filter.accept(file))
  25.                                         System.out.println(getLevel(level)+file.getName());
  26.                         }
  27.              }
  28.      }
  29.         private static String getLevel(int level) {
  30.                 StringBuilder sb=new StringBuilder("|--");
  31.                 for (int i = 0; i < level; i++) {
  32.                         sb.insert(0,"  ");
  33.                 }
  34.                 return sb.toString();
  35.         }
  36. }
复制代码



回复 使用道具 举报
ddewym123 发表于 2014-7-21 15:57
疑问与错误:
1、你所用的FileFilterByName类,我未查找到,请问是自己写的吗?
2、File[] file = f.listFi ...

感谢,我的第三行代码传入的过滤器,只能过滤文件夹的第一层,要想得到所有的TXT文件,只能在递归的出口,在对所有递归出来的文件进行判断,这样需求才能完成,刚开始还是没有完全明白过滤器该如何使用,,万分感谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马