jar无法找到JSON文件

时间:2019-01-13 19:15:59

标签: java json jar

我从项目中构建了一个jar。该项目的File文件夹包含不同的JSON文件。 enter image description here

我试图像这样读取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;
    }
}

1 个答案:

答案 0 :(得分:0)

当您实际分发应用程序时,这根本行不通。如果您要提供应用程序随附的文件,请将这些文件作为资源。 https://docs.oracle.com/javase/8/docs/technotes/guides/lang/resources.html

对于您而言,最直接的方法是将Files放在src目录中。