如何在 Java 中引用资源?

2022-09-04 06:04:41

我需要在代码中读取文件。它实际上驻留在这里:

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文件中运行?


答案 1

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

因此,如果你有一个类,并且(在与资源相同的类装入器中),你可以使用: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 对象。