【发布时间】:2010-09-16 05:38:57
【问题描述】:
假设我的类是从压缩的 .war 文件中加载或在其他地方加载的, 如何发现给定包中的所有资源?枚举文件不会真正起作用,因为这是一个战争文件。这很可能涉及使用当前的类加载器?
有没有图书馆可以做这样的事情?谷歌搜索只发现了一些关于列表文件的黑客攻击。
【问题讨论】:
假设我的类是从压缩的 .war 文件中加载或在其他地方加载的, 如何发现给定包中的所有资源?枚举文件不会真正起作用,因为这是一个战争文件。这很可能涉及使用当前的类加载器?
有没有图书馆可以做这样的事情?谷歌搜索只发现了一些关于列表文件的黑客攻击。
【问题讨论】:
是的。你可以使用ClassLoader.getResources("");
或者你可以使用 ferret API:
https://www.ohloh.net/p/pureperfect-ferret
此 API 允许您使用访问者模式扫描类路径以及任意存档和目录。
【讨论】:
ClassLoader.getResources("") 真的不适用于罐子。请参阅this question 上的 cmets。 Spring PathMatchingResourcePatternResolver 在 their documentation 中也提到了他们实现的从 JAR 中实际查找资源的技巧(请参阅“对可移植性的影响”部分)。
不,您不能列出包中的资源,因为 JVM 根本不知道包中的资源。见this question。
【讨论】:
Spring 框架提供了一个名为PathMatchingResourcePatternResolver 的类。使用这个类,您可以使用通配符提供 Ant 样式路径,它会为您找到相关资源(搜索类路径上的文件夹和 jar)。
【讨论】:
我这样做:
- 包装前,ls myResources/*.ext > myResources/list.txt
- 然后先读取文件
【讨论】: