【发布时间】:2019-01-14 03:32:21
【问题描述】:
我从我的项目中构建了一个 jar。该项目有一个包含不同 JSON 文件的文件夹。
我尝试像这样读取 JSON 文件:
public Status readStatus(){
Status status = new Status();
ObjectMapper mapper = new ObjectMapper();
try {
status = mapper.readValue(new FileInputStream(System.getProperty("user.dir")+ "/Files/Status.json"),
Status.class);
} catch (IOException e) {
e.printStackTrace();
}
return status;
}
当我运行 jar 文件时,出现以下异常:
java.io.FileNotFoundException: \Status.json(系统找不到指定的文件)
我认为问题在于我使用了相对路径来引用文件。我在这个论坛上找到了不同的解决方案,解释说我应该使用方法this.getClass().getResourceAsStream(...),所以我将方法更改为:
public Status readStatus(){
Status status = new Status();
ObjectMapper mapper = new ObjectMapper();
try {
status = mapper.readValue(this.getClass().getResourceAsStream("/Status.json"),
Status.class);
} catch (IOException e) {
e.printStackTrace();
}
return status;
}
这样做之后,我又遇到了一个异常:
com.fasterxml.jackson.databind.exc.MismatchedInputException:由于输入结束,没有要映射的内容 在 [来源:未知;行:1,列:0]
如何正确引用文件,以便在不抛出 InputException 的情况下找到并读取它?
编辑:JSON 文件:
{"changeTires":true}
映射类:
public class Status {
public boolean changeTires = false;
public boolean isChangeTires() {
return changeTires;
}
public void setChangeTires(boolean changeTires) {
this.changeTires = changeTires;
}
}
【问题讨论】:
-
为什么不使用资源文件夹而不是项目根目录中的文件夹?