Android开发:如何在MP3文件扫描逻辑中添加排除指定前缀文件功能
实现方案
核心逻辑
只需要在原有MP3文件判断的分支中新增前缀匹配过滤即可,同时兼容用户输入空格、空排除规则的边缘场景:
- 拆分排除前缀后对每个值做去空格处理,避免用户输入时逗号前后带空格导致匹配失效
- 遍历所有排除前缀,只要文件名命中任意一个前缀就跳过加入列表
- 空的排除前缀直接跳过,不会出现误匹配的情况
完整修改后代码
public ArrayList<File> fetchSongs(File file, String exclFiles){ ArrayList<File> arrayList = new ArrayList<>(); File [] songs = file.listFiles(); // 处理排除前缀为空的场景,避免空指针异常 String [] cParts = exclFiles != null ? exclFiles.split(",") : new String[0]; if(songs !=null){ for(File myFile: songs){ if(!myFile.isHidden() && myFile.isDirectory()){ arrayList.addAll(fetchSongs(myFile, exclFiles)); } else{ String fileName = myFile.getName(); if (fileName.endsWith(".mp3") && !fileName.startsWith(".")) { boolean isExcluded = false; // 遍历所有排除前缀判断是否匹配 for (String prefix : cParts) { String trimedPrefix = prefix.trim(); // 跳过空前缀,避免误匹配 if (trimedPrefix.isEmpty()) { continue; } if (fileName.startsWith(trimedPrefix)) { isExcluded = true; // 匹配到任意一个前缀就跳出循环,优化性能 break; } } // 只有未命中排除规则的文件才加入展示列表 if (!isExcluded) { arrayList.add(myFile); } } } } } return arrayList; }
改动说明
- 补全了原有代码中
split语句遗漏的分号,修正了ArrayList未声明泛型的警告 - 新增了
exclFiles空值判断,避免用户未输入排除规则时出现空指针异常 - 对每个排除前缀做去空格处理,兼容用户输入时的多余空格
- 新增
isExcluded标记位,匹配到任意排除前缀就标记为需要过滤,不加入结果列表
内容的提问来源于stack exchange,提问作者SuhailHasan
相关产品推荐
相关产品推荐

