如何浏览Java类资源?

Dav*_*ann 16 java resources classpath

我知道我们可以这样做:

Class.class.getResourceAsStream("/com/youcompany/yourapp/module/someresource.conf")
Run Code Online (Sandbox Code Playgroud)

读取我们的jar文件中打包的文件.

我已经google了很多,我肯定没有使用正确的条款; 我想要做的是列出可用的资源,如下所示:

Class.class.listResources("/com/yourcompany/yourapp")
Run Code Online (Sandbox Code Playgroud)

这应该返回包内的资源列表 com.yourcompany.yourapp.*

那可能吗?关于如何做到这一点的任何想法,以防它不能像我展示的那样轻松完成?

注意:我知道可以知道罐子的位置,然后打开它并检查其内容以实现它.但是,我不能在我现在工作的环境中这样做.

eri*_*son 10

对于JAR文件中的资源,这样的工作原理:

URL url = MyClass.class.getResource("MyClass.class");
String scheme = url.getProtocol();
if (!"jar".equals(scheme))
  throw new IllegalArgumentException("Unsupported scheme: " + scheme);
JarURLConnection con = (JarURLConnection) url.openConnection();
JarFile archive = con.getJarFile();
/* Search for the entries you care about. */
Enumeration<JarEntry> entries = archive.entries();
while (entries.hasMoreElements()) {
  JarEntry entry = entries.nextElement();
  if (entry.getName().startsWith("com/y/app/")) {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以使用文件系统或许多其他存储库中"爆炸"的资源执行相同的操作,但这并不是那么容易.您需要为要支持的每个URL方案指定特定代码.