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
相关产品推荐
相关产品推荐

