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() }