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

Java中如何获取resources文件夹下的所有文件列表?

核心前提

Maven标准打包流程中,src/main/resources下的文件会被直接拷贝至jar包的根目录,与编译后的.class文件同级,因此原resources文件夹本身不会出现在最终jar结构中,这是正常表现。

高效过滤实现

你已经在用的JarFile.entries()遍历是当前场景下效率最高的方案,只需添加3个简单的字符串匹配过滤规则即可筛选出原resources目录下的所有文件:

  • 排除所有目录条目(如需保留空目录可跳过该规则)
  • 排除后缀为.class的编译类文件
  • 排除META-INF/开头的Jar包系统生成目录/文件

代码示例

import java.util.Collections;
import java.util.List;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class ResourceReader {
    public static void main(String[] args) throws Exception {
        JarFile jarFile = new JarFile("your-target.jar");
        Enumeration<JarEntry> entries = jarFile.entries();

        List<JarEntry> resourceFileList = Collections.list(entries)
                .stream()
                // 跳过目录,如需保留空目录可删除该行
                .filter(entry -> !entry.isDirectory())
                // 过滤所有编译类文件
                .filter(entry -> !entry.getName().endsWith(".class"))
                // 过滤Jar包系统目录
                .filter(entry -> !entry.getName().startsWith("META-INF/"))
                // 如有其他自定义需排除的路径可在此追加过滤规则
                .toList();

        // 后续处理resourceFileList即可
        resourceFileList.forEach(entry -> System.out.println(entry.getName()));
    }
}

特殊场景适配

如果你手动修改过maven-resources-plugin的outputDirectory配置,将资源文件输出到了Jar包内的自定义目录,只需追加一条前缀匹配规则即可,例如资源输出到custom-res/目录时,新增.filter(entry -> entry.getName().startsWith("custom-res/"))过滤条件即可。

内容的提问来源于stack exchange,提问作者ABC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:15:02