如何在Java ..中基于特定文件的扩展名过滤文件夹(目录和子目录)?

罗纳克·普拉丹:

好吧,我读了很多东西,但是我没有弄清楚如何根据文件扩展名过滤文件夹(目录和子目录),例如,我想要仅包含“ .mp3”的文件夹(目录和子目录)列表”或“ .mp4”文件,并且我不希望使用Walk.Tree,如果有通过“ filenameFilter”或除Walk.tree方法以外的任何其他方式的方法。

这是到目前为止我尝试过的代码,没有错误,但也没有过滤特定文件的文件夹。它显示所有文件夹。

提前致谢。

  File[] ff = f.listFiles(new FilenameFilter() {
                @Override
                public boolean accept(File dir, String name) {
                    return name.toLowerCase().endsWith(".mp3") || new File(dir.toPath().toString(),name).isDirectory();
                }

            });
Abhinaba Chakraborty:

这是一个简单的控制台应用程序。

该算法如下所示:

  1. 首先从指定的根文件夹中递归搜索所有具有mp3扩展名的文件,并将其继续添加到列表中。
  2. 如果此列表恰好为空,请返回。
  3. 否则,对于每个这些mp3文件,递归地找到其父文件夹,直到到达根文件夹为止,并继续将这些父文件夹存储在一个集中,以避免重复搜索。
  4. 现在,从根目录开始打印所有那些有效的文件夹。
public class MyApp {

  public static void main(String[] args) {

    File rootDir = new File("src/main/resources/dir1");
    List<File> filesListWithValidExtension = new ArrayList<>();
    recursiveSearch(rootDir, filesListWithValidExtension);

    if (filesListWithValidExtension.size() == 0) {
      System.out.println("Specified root directory has no file with mp3 extension");
      return;
    }

    Set<File> requiredFolders = new HashSet<>();
    for (File fileWithValidExtension : filesListWithValidExtension) {
      File parent;
      do {
        parent = fileWithValidExtension.getParentFile();
        if (requiredFolders.contains(parent)) {
          break;
        } else {
          requiredFolders.add(parent);
          fileWithValidExtension = parent;
        }
      }
      while (!parent.getPath().equals(rootDir.getPath()));
    }

    System.out.println("Printing folders (from root) containing mp3 files");
    recursivePrint(rootDir, requiredFolders);

  }

  private static void recursiveSearch(File file, List<File> filesListWithvalidExtension) {
    if (!file.exists()) {
      return;
    }
    if (file.isDirectory()) {
      for (File f : file.listFiles()) {
        recursiveSearch(f, filesListWithvalidExtension);
      }
    }
    if (file.getName().toLowerCase().endsWith(".mp3")) {
      filesListWithvalidExtension.add(file);
    }
  }

  private static void recursivePrint(File file, Set<File> requiredFolders) {
    if (!requiredFolders.contains(file)) {
      return;
    }
    System.out.println(file.getPath());

    for (File f : file.listFiles()) {
      recursivePrint(f, requiredFolders);
    }

  }

}

该程序输出如下:

Printing folders (from root) containing mp3 files
src/main/resources/dir1
src/main/resources/dir1/dir12
src/main/resources/dir1/dir11
src/main/resources/dir1/dir11/dir111

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从特定给定的目录和所有子目录中搜索具有特定扩展名的文件

如何忽略一个目录及其子目录中的特定扩展名的所有文件?

如何在Mac OS X的子目录中更改文件扩展名

如何在多个子目录中找到相同扩展名的所有文件并使用 python 将它们移动到单独的文件夹?

如何在Windows中播放文件夹和子文件夹或目录和子目录中的媒体文件?

如何下载包含在线文件/文件夹列表中的所有文件和子目录的HTTP目录?

如何在多个子目录中使用python向文件添加扩展名

如何批量更改文件夹中的所有扩展名。(带有目录)

如何将具有特定文件扩展名的所有文件从子目录移动到单个目录

如何在QtCreator中为项目创建文件夹或子目录?

如何路由到子目录/文件夹?

使用webkitDirectory和Java Servlet在文件夹/子目录中上载文件

如何路由到公用文件夹JS和CSS文件而不是Rails中的子目录?

如何更改文件夹的权限,包括其随附的文件和子目录?

如何将具有特定扩展名的文件从子目录移动到另一个目录,包括使用 CMD 创建文件所在的子目录?

如何遍历子目录和子目录中的文件,然后在 bash 中打印文件名

bash从特定文件扩展名在文件夹中创建子目录

如何将当前目录和子目录及其子目录的“.txt”扩展名更改为“.html”

如何使用Grunt压缩子文件夹/子目录中的所有JavaScript文件?

如何使用Powershell代码遍历子目录并删除特定文件夹?

如何在目录/文件夹中找到子目录?

如何解压缩我的子目录中的所有 zip 文件夹?

如何获取在项目文件夹中创建的最新子目录

java:根据文件名在目录和子目录中搜索

Bash-如何归档和压缩子目录中的文件,但只能使用特定的文件名

如何在以 bat 文件中的特定扩展名结尾的目录中搜索文件

如何获得每个子目录中与文件扩展名列表匹配的第一个文件?

在特定目录及其子目录中,找到所有以 .tmp 扩展名结尾的文件夹

如何更改子目录中的文件名