我需要获取文件列表但忽略特定的子目录。例如,这是一个示例结构。
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<Boxset> 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);
}
}
}
}
}
答案 0 :(得分:0)
您可以使用FileFilter
获取不包含Bonus
的子目录列表
File[] nonBonusDirs = dir.listFiles(new FileFilter() {
@Override public boolean accept(File file) {
return file.isDirectory() && !file.getName().equalsIgnoreCase("bonus");
}
});
然后,您可以获取不在Bonus
目录中的所有文件的列表
List<File> filesNotInBonusDir = new ArrayList<>();
for (File directory : nonBonusDirs) {
filesNotInBonusDir.addAll(Arrays.asList(directory.listFiles()));
}
当然,由于flatMap
,这些恶作剧在Kotlin中要好得多;)
val filesNotInBonusDir: List<File> = dir.listFiles()
.filter { it.isDirectory && !it.name.equals("bonus", ignoreCase = true) }
.flatMap { it.listFiles().toList() }