我正在寻找一种方法来从给定的类路径目录中获取所有资源名称的列表,类似于方法 List<String> getResourceNames (String directoryName)
。
For example, given a classpath directory x/y/z
containing files a.html
, b.html
, c.html
and a subdirectory d
, getResourceNames("x/y/z")
应该返回一个 List<String>
包含以下字符串: ['a.html', 'b.html', 'c.html', 'd']
。
它应该适用于文件系统和 jars 中的资源。
我知道我可以用 File
s、 JarFile
s 和 URL
s 和 – s 编写一个快速片段,但我不想重新发明轮子。我的问题是,鉴于现有的公开可用库,实现 getResourceNames
的最快方法是什么? Spring 和 Apache Commons 堆栈都是可行的。
原文由 Marat Salikhov 发布,翻译遵循 CC BY-SA 4.0 许可协议
自定义扫描仪
实施您自己的扫描仪。例如:
( 评论中提到了此解决方案的局限性)
弹簧框架
使用 Spring 框架中的
PathMatchingResourcePatternResolver
。龙马莫感言
对于巨大的 CLASSPATH 值,其他技术在运行时可能会很慢。一个更快的解决方案是使用 ronmamo 的 Reflections API ,它在编译时预编译搜索。