代码之家  ›  专栏  ›  技术社区  ›  Chris Knight

如何引用Java中的资源?

  •  11
  • Chris Knight  · 技术社区  · 15 年前

    我需要读我代码中的一个文件。它实际地居住在这里:

    C:\eclipseWorkspace\ProjectA\src\com\company\somePackage\MyFile.txt
    

    我把它放在一个源包中,这样当我创建一个可运行的JAR文件(export->可运行的JAR文件)时,它就会包含在JAR中。最初我把它放在项目根目录中(还尝试了一个普通的子文件夹),但是导出没有将它包含在jar中。

    如果在我的代码中我这样做:

    File myFile = new File("com\\company\\somePackage\\MyFile.txt");
    

    JAR文件正确地定位文件,但是在本地运行(运行AS & -gt;Java主应用程序),抛出文件未找到异常,因为它期望它是:

    File myFile = new File("src\\com\\company\\somePackage\\MyFile.txt");
    

    但这在我的JAR文件中失败了。所以我的问题是,如何使这个概念在本地和JAR文件中运行?

    2 回复  |  直到 15 年前
        1
  •  33
  •   j3h John L    12 年前

    使用 ClassLoader.getResourceAsStream Class.getResourceAsStream . 两者的主要区别在于 ClassLoader 版本总是使用“绝对”路径(在JAR文件或其他文件中),而 Class 版本是相对于类本身的,除非在路径前面加上/前缀。

    所以如果你有课 com.company.somePackage.SomeClass com.company.other.AnyClass (在与资源相同的类加载器中)可以使用:

    SomeClass.class.getResourceAsStream("MyFile.txt")
    

    AnyClass.class.getClassLoader()
                  .getResourceAsStream("com/company/somePackage/MyFile.txt");
    

    AnyClass.class.getResourceAsStream("/com/company/somePackage/MyFile.txt");
    
        2
  •  0
  •   Christian    15 年前

    如果我把我的文件放在一个JAR文件中,它只有在并且只有当我使用

    ...getResourceAsStream("com/company/somePackage/MyFile.txt")
    

    如果我使用一个文件对象,它就不会起作用。我也得到了filenotfound异常。现在,我继续处理inputstream对象。