代码之家  ›  专栏  ›  技术社区  ›  brabster

我如何在一个项目中找到资源。jar在类路径上?

  •  8
  • brabster  · 技术社区  · 16 年前

    如果我的类路径上的目录中有一组资源文件,我可以使用 ClassLoader.getResources(location) .

    例如,如果我有 /mydir/myresource.properties 在类路径上,我可以调用类加载器的 getResources("mydir") myresource.properties .

    当我把完全相同的资源打包成一个。jar,当我打电话时,我在URL枚举中没有得到任何信息。我只是用一个包含这些文件夹的jar替换了文件夹结构(这是一个webapp,所以jar将进入 /WEB-INF/lib ).我还接到了很多其他的电话 getResourceAsStream(location) 按名称单独获取其他资源,它们都工作正常。

    当资源位于同一位置时,枚举资源有什么不同。罐子


    更新-我复制了容器外的行为。以下代码段将导致 dirProperties 对象,其密钥设置为包中的资源名称,但如果包位于。jar在创建属性期间抛出NullPointerException。加载(输入流)方法。

    Properties dirProperties = new Properties();
    dirProperties.load(this.getClass().getClassLoader().getResourceAsStream(location));
    

    容器(Tomcat 5.5)上的相同代码不会引发异常,但当文件位于一个容器中时,会生成一个空属性对象。罐子

    2 回复  |  直到 16 年前
        1
  •  1
  •   sugaGenius    9 年前

    虽然我有很多问题要问你,以准确地提出解决方案,但我可以请你尝试这个简单的步骤,它可以帮助你找到资源。我相信您用来查找资源的类加载器无法找到资源。因此,您可以尝试以下方法(更多的是解决问题):

    1. 创建一个简单的空类(例如ResourceGetter.class)
    2. 将类与JAR中的其他资源打包。让此类与其他资源打包在同一级别的文件夹层次结构中。例如,在罐子内部:

      /资源/资源获取者。班

      /资源/myprop。属性 ....

    3. 使用ResourceGetter。班getClassLoader()。getResourceAsStream()或getResources()在代码中您想要这些资源文件的位置。

    如果你可以访问这些资源,你可以找到加载它的类加载器,你可以在那里解决你的问题。

        2
  •  0
  •   Schildmeijer    16 年前
    this.getClass ().getClassLoader ().getResourceAsStream(location);
    
    推荐文章