jar执行期间资源路径更改

时间:2018-01-31 07:12:27

标签: java json file

我试图在Resources目录中读取json文件,并使用以下内容:

jsonObject = this.readJson(this.getClass().getClassLoader().getResource("jsonFileName").getPath());

在IDE中它正确运行但是当我构建thw jar并尝试通过java -jar jarName运行它时,我得到一个"找不到文件"错误,当我检查路径时,它看起来像这样:

...projectName/target/projectName-1.0-SNAPSHOT.jar!/kb/is/identity.json

在IDE上运行时,路径如下所示:

...projectName/target/classes/kb/is/identity.json

2 个答案:

答案 0 :(得分:2)

getResource("jsonFileName") - 在这种情况下,根目录是在Idea下使用它的项目名称,但是当你在jar下运行它时 - 我认为根路径是User Home

如果我没记错,您可以在资源路径中使用/进行修复。 例如。使用Maven时,您有一个resource directoryidentity.json中有resource root。使用 getClass().getResourceAsStream("/identity.json") 会收到此文件(在Ideajar中),因为当您构建jar时,所有资源都会复制到根目录jar文件。

答案 1 :(得分:2)

使用getResourceAsStream非常重要,而不是getResource。 看看How getClassLoader().getResourceAsStream() works in java