如何判断目录非空后,按ArrayList中扩展名筛选指定目录文件?
解决指定目录下匹配扩展名文件的筛选问题
原代码存在的问题
- 路径未转义:
"G:\AE_IntegrationComp"中的反斜杠需要转义,否则会被识别为无效转义字符 - 缺少目录有效性判断:未检查目录是否存在、是否为合法目录
- 空目录未处理:直接调用
listFiles()可能返回null,遍历会触发空指针异常 - 扩展名匹配逻辑错误:
contains("")无实际判断作用,且未使用定义的扩展名列表 - 空循环冗余:遍历
filet的循环未执行任何操作
修正后的完整代码
import java.io.File; import java.util.ArrayList; import java.util.List; public class FileFilterDemo { public static void main(String[] args) { // 路径转义:用双反斜杠或正斜杠保证路径有效 String folderPath = "G:\\AE_IntegrationComp"; List<String> targetExtensions = new ArrayList<>(); targetExtensions.add(".txt"); targetExtensions.add(".doc"); File directory = new File(folderPath); // 先校验目录合法性 if (!directory.exists() || !directory.isDirectory()) { System.out.println("指定路径不是有效目录"); return; } File[] files = directory.listFiles(); // 判断目录是否为空 if (files == null || files.length == 0) { System.out.println("目录为空"); return; } // 遍历文件并匹配目标扩展名 for (File file : files) { // 只处理文件,排除子目录 if (file.isFile()) { String fileName = file.getName(); for (String ext : targetExtensions) { // 用endsWith精准匹配文件扩展名 if (fileName.endsWith(ext)) { System.out.println(fileName); break; // 匹配到后跳出内层循环,避免重复打印 } } } } } }
关键逻辑说明
- 路径处理:Java字符串中反斜杠
\需转义为\\,或直接使用正斜杠/(跨平台兼容) - 目录校验:先确认路径存在且是目录,避免无效操作
- 空目录判断:通过
listFiles()返回值判断目录是否为空,防止空指针异常 - 扩展名匹配:用
endsWith()替代contains(),确保匹配的是文件末尾的扩展名,避免误判文件名中包含扩展名的情况 - 文件过滤:通过
file.isFile()排除子目录,只处理实际文件
内容的提问来源于stack exchange,提问作者AkshayP
相关产品推荐
相关产品推荐

