【问题标题】:How do I reference a resource in Java?如何在 Java 中引用资源?
【发布时间】:2011-04-13 06:46:17
【问题描述】:

我需要在我的代码中读取一个文件。它实际驻留在此处:

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

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

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

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

jar 文件正确定位了该文件,但在本地运行(运行方式->Java 主应用程序)会抛出一个找不到文件的异常,因为它期望它是:

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

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

【问题讨论】:

    标签: java file-io embedded-resource


    【解决方案1】:

    使用ClassLoader.getResourceAsStreamClass.getResourceAsStream。两者之间的主要区别在于ClassLoader 版本始终使用“绝对”路径(在 jar 文件或其他任何内容中),而Class 版本是相对于类本身的,除非您在路径前加上 /.

    因此,如果您有一个类 com.company.somePackage.SomeClasscom.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】:

      如果我将 i 文件放在 jar 文件中,它仅在我使用时才有效

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

      如果我使用 File 对象,它永远不会起作用。我也得到了 FileNotFound 异常。现在,我继续使用 InputStream 对象。

      【讨论】:

        猜你喜欢
        • 2019-12-20
        • 1970-01-01
        • 2013-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-11
        • 1970-01-01
        • 2014-07-22
        相关资源
        最近更新 更多