You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断目录非空后,按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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:25:21