我从项目中构建了一个jar。该项目的File文件夹包含不同的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;
}
}
答案 0 :(得分:0)
当您实际分发应用程序时,这根本行不通。如果您要提供应用程序随附的文件,请将这些文件作为资源。 https://docs.oracle.com/javase/8/docs/technotes/guides/lang/resources.html
对于您而言,最直接的方法是将Files
放在src
目录中。