【问题标题】:Can I list the resources in a given package?我可以列出给定包中的资源吗?
【发布时间】:2010-09-16 05:38:57
【问题描述】:

假设我的类是从压缩的 .war 文件中加载或在其他地方加载的, 如何发现给定包中的所有资源?枚举文件不会真正起作用,因为这是一个战争文件。这很可能涉及使用当前的类加载器?

有没有图书馆可以做这样的事情?谷歌搜索只发现了一些关于列表文件的黑客攻击。

【问题讨论】:

    标签: java list resources war


    【解决方案1】:

    是的。你可以使用ClassLoader.getResources("");

    或者你可以使用 ferret API:
    https://www.ohloh.net/p/pureperfect-ferret

    此 API 允许您使用访问者模式扫描类路径以及任意存档和目录。

    【讨论】:

    • +1 正确的解决方案,应该适用于任何类加载器和 Web 容器
    • 我相信ClassLoader.getResources("") 真的不适用于罐子。请参阅this question 上的 cmets。 Spring PathMatchingResourcePatternResolvertheir documentation 中也提到了他们实现的从 JAR 中实际查找资源的技巧(请参阅“对可移植性的影响”部分)。
    • 是的,它适用于罐子。它适用于任何环境。
    【解决方案2】:

    不,您不能列出包中的资源,因为 JVM 根本不知道包中的资源。见this question

    【讨论】:

      【解决方案3】:

      Spring 框架提供了一个名为PathMatchingResourcePatternResolver 的类。使用这个类,您可以使用通配符提供 Ant 样式路径,它会为您找到相关资源(搜索类路径上的文件夹和 jar)。

      【讨论】:

        【解决方案4】:

        我这样做: - 包装前,ls myResources/*.ext > myResources/list.txt - 然后先读取文件

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-05-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-04
          • 2012-03-31
          相关资源
          最近更新 更多