如何在Java中引用资源?

Chr*_*ght 11 java file-io embedded-resource

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

C:\eclipseWorkspace\ProjectA\src\com\company\somePackage\MyFile.txt
Run Code Online (Sandbox Code Playgroud)

我把它放在一个源码包,这样,当我创建一个可运行jar文件(导出 - >运行的JAR文件),它被包含在瓶子里.最初我在项目根目录中使用它(并且还尝试了一个普通的子文件夹),但导出不包括在jar中.

如果在我的代码中我做:

File myFile = new File("com\\company\\somePackage\\MyFile.txt");
Run Code Online (Sandbox Code Playgroud)

jar文件正确定位文件,但本地运行(运行AS-> Java的主要应用)抛出了一个文件,未发现异常,因为它希望它是:

File myFile = new File("src\\com\\company\\somePackage\\MyFile.txt");
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 34

使用ClassLoader.getResourceAsStreamClass.getResourceAsStream.两者之间的主要区别是,ClassLoader版本始终使用"绝对"路径(jar文件或什么之内),而Class版本是相对于类本身,除非你前缀/路径.

因此,如果您有一个类com.company.somePackage.SomeClass并且com.company.other.AnyClass(在与资源相同的类加载器中),您可以使用:

SomeClass.class.getResourceAsStream("MyFile.txt")
Run Code Online (Sandbox Code Playgroud)

要么

AnyClass.class.getClassLoader()
              .getResourceAsStream("com/company/somePackage/MyFile.txt");
Run Code Online (Sandbox Code Playgroud)

要么

AnyClass.class.getResourceAsStream("/com/company/somePackage/MyFile.txt");
Run Code Online (Sandbox Code Playgroud)