listFiles(),但忽略Android中的一个子目录

我需要得到一个文件列表,但忽略一个特定的子目录。 例如这里是一个示例结构。

Content ->1 -->file_a.mp4 -->file_b.mp4 ->2 -->file_c.mp4 -->file_d.mp4 ->Bonus -->1 --->file_e.mp4 --->file_f.mp4 

我需要能够获得排除奖励目录的文件/目录列表。

我还需要单独列出奖励目录的文件,但我认为这可以通过使用常规方法轻松解决。

如何执行列表文件,但忽略目录?

这是我的示例代码将返回一切

 final List boxsets = getCloudBoxsetsWithTrackData(context); final File[] boxsetFiles = dir.listFiles(); if (boxsetFiles != null) { for (File subDir : boxsetFiles) { if (subDir.isDirectory()) { for (Boxset boxset : boxsets) { if (subDir.getName().equalsIgnoreCase(String.valueOf(boxset.persistentId))) { DBHandler.getInstance(context).moveBoxsetToDeviceList(boxset); DownloadLibrarian.getInstance(context).stopDownload(boxset); } } } } } 

您可以使用FileFilter来获取不包括Bonus的子目录列表

 File[] nonBonusDirs = dir.listFiles(new FileFilter() { @Override public boolean accept(File file) { return file.isDirectory() && !file.getName().equalsIgnoreCase("bonus"); } }); 

然后您可以获取不在Bonus目录中的所有文件的列表

 List filesNotInBonusDir = new ArrayList<>(); for (File directory : nonBonusDirs) { filesNotInBonusDir.addAll(Arrays.asList(directory.listFiles())); } 

虽然当然这些诡计在Kotlin中要好得多,因为flatMap ;)

 val filesNotInBonusDir: List = dir.listFiles() .filter { it.isDirectory && !it.name.equals("bonus", ignoreCase = true) } .flatMap { it.listFiles().toList() }