如何在Java中引用资源?

我需要读取代码中的文件。它实际上位于此处:

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

我将其放在源包中,以便在创建可运行的jar文件(导出-> Runnable

JAR文件)时将其包含在jar中。最初,我将其放在项目根目录中(并尝试了一个普通的子文件夹),但导出文件并未将其包含在jar中。

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

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

jar文件正确地找到了该文件,但是在本地运行(运行方式-> Java Main应用程序)会引发文件未找到异常,因为它希望它是:

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

但这在我的jar文件中失败。所以我的问题是,如何使此概念适用于本地运行和在jar文件中运行?

回答:

使用ClassLoader.getResourceAsStreamClass.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");

以上是 如何在Java中引用资源? 的全部内容, 来源链接: utcz.com/qa/404121.html

回到顶部