【问题标题】:FilenameFilter to show list files with certain extension and directoriesFilenameFilter 显示具有特定扩展名和目录的列表文件
【发布时间】:2016-06-18 19:21:08
【问题描述】:

我正在使用 FilenameFilter 类列出目录中具有特定扩展名的所有文件。但我也想列出该目录中的所有目录。 我在互联网上搜索,只发现如何使用 FilenameFilter 进行多个扩展。但是我怎样才能对目录也这样做呢?

这是我用来列出所有 .txt 文件的代码:

File[] listOfFiles = folder.listFiles(new FilenameFilter() {
        public boolean accept(File dir, String name) {
            return name.toLowerCase().endsWith(".txt");
        }
    }); 

有没有办法通过过滤器做到这一点,还是我必须以其他方式做到这一点?

【问题讨论】:

    标签: java


    【解决方案1】:

    你有很多方法可以做到这一点。特别是,java.io.FileFilterFilenameFilter 提供了更大的灵活性,允许您使用isDirectory() 测试目录:

    File[] listOfFiles = folder.listFiles(new FileFilter() {
                @Override
                public boolean accept(File pathname) {
                    return pathname.getName().toLowerCase().endsWith(".txt") 
                        || pathname.isDirectory();
                }
            });
    

    【讨论】:

      【解决方案2】:

      我用这个代码

       for(File f : Folder.listFiles()){
                 String fileName = f.getName();
                 String fileExtension = fileName.substring(fileName.indexOf(".") + 1, f.getName().length());
                 fileExtension = fileExtension.toLowerCase();
                 if(fileExtension.equals("png") || fileExtension.equals("jpg")){
                    System.out.println(f.getName());
                 }
             }
      

      您可以更改 png 或 jpg 或向它们添加一些东西

      【讨论】:

      • 如果文件名中有多个点,这将中断。另外,您没有回答问题的目录部分。
      • 我认为这不会破坏 fileName.lastIndexOf(".") + 1, f.getName().length()
      • 应该没问题。您甚至可以省略 substring 的第二个参数,因为字符串的结尾是隐含的 (docs.oracle.com/javase/7/docs/api/java/lang/… )。
      猜你喜欢
      • 1970-01-01
      • 2018-02-05
      • 2013-09-20
      • 1970-01-01
      • 2012-05-23
      • 2018-04-27
      • 1970-01-01
      • 2010-12-03
      • 2017-05-09
      相关资源
      最近更新 更多