如何在Java中引用资源?
我需要在我的代码中读取一个文件。 它实际上驻留在这里:
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文件正确定位文件,但在本地运行(Run As-> Java Main应用程序)会抛出一个找不到文件的exception,因为它期望它是:
File myFile = new File("src\\com\\company\\somePackage\\MyFile.txt");
但这在我的jar文件中失败了。 所以我的问题是,如何让这个概念在本地和我的jar文件中运行?
使用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");
如果我将i文件放在一个jar文件中,它只在我使用时才有效
...getResourceAsStream("com/company/somePackage/MyFile.txt")
如果我使用了File对象,它从未工作过。 我还得到了FileNotFoundexception。 现在,我留在InputStream对象。