Maven项目中资源文件的路径是什么?

aca*_*low 35 java maven-2

在我的Maven项目中,我在main方法中有以下代码:

FileInputStream in = new FileInputStream("database.properties");
Run Code Online (Sandbox Code Playgroud)

但总是得到一个文件未找到错误.

我已将文件放在src/main/resources中,并将其正确复制到target/classes目录(我相信这是Maven资源的预期行为),但在实际运行程序时,它似乎永远无法找到该文件.我尝试了其他各种途径:

FileInputStream in = new FileInputStream("./database.properties");
FileInputStream in = new FileInputStream("resources/database.properties");
Run Code Online (Sandbox Code Playgroud)

等似乎没什么用.

那么正确的使用途径是什么?


根据下面的"disown's"答案,我需要的是:

InputStream in = TestDB.class.getResourceAsStream("/database.properties")
Run Code Online (Sandbox Code Playgroud)

哪个TestDB是类的名称.

谢谢你的帮助,谢绝!

Ale*_*ing 56

您无法直接加载文件,您需要使用资源抽象(资源不仅可以在文件系统中,而且可以在类路径的任何位置 - 在jar文件中或其他方式).这种抽象是加载资源时需要使用的.资源路径是相对于类文件的位置的,因此您需要预先设置斜杠以获取"root":

InputStream in = getClass().getResourceAsStream("/database.properties");
Run Code Online (Sandbox Code Playgroud)

  • 使用类名,例如Main.class.getResourceAsStream().您可以使用任何类或类加载器,因此hread.getContextClassLoader().getResourceAsStream()也可以使用. (4认同)