【问题标题】:jar cannot find JSON filejar 找不到 JSON 文件
【发布时间】: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;
    }
}

【问题讨论】:

  • 为什么不使用资源文件夹而不是项目根目录中的文件夹?

标签: java json jar


【解决方案1】:

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

在您的情况下,最直接的方法是将Files 放在src 目录中。

【讨论】:

  • 谢谢!在构建我的 jar 之前,我没有指定资源文件夹...
猜你喜欢
  • 2019-03-02
  • 2013-12-25
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
  • 2018-06-29
  • 1970-01-01
相关资源
最近更新 更多