从 .jar 文件读取外部 json 文件

Read external json file from .jar file

提问人:Juan 提问时间:2/24/2022 更新时间:2/24/2022 访问量:900

问:

我想在执行 jar 时从作为参数接收的 json 文件中使用 Gson 构建一个 json 对象。

这是我用来读取json文件的方法

public static JsonObject loadData(String filename) throws FileNotFoundException {
        Gson parser = new Gson();
        File jsonFile = new File(filename);
        BufferedReader br = null;
        JsonObject fileParsed;
        try {
            br = new BufferedReader(new FileReader(jsonFile));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            fileParsed = parser.fromJson(br, JsonObject.class);
        } catch (JsonSyntaxException e) {
            throw e;
        }
        return fileParsed;
    }

当我尝试使用框架(IntelliJ 或 Eclipse)运行它时,这种方法在生成 jar 之前是有效的,但是如果我生成一个 jar 文件,然后我尝试获取不在 jar 文件中的 json 文件不起作用。

如果我执行java -jar file.jar jsonFile.json,我会得到java.lang.NullPointerException

我尝试了一些其他方法,但总是NullPointerException。对此有任何线索吗? 谢谢!

java json eclipse nullpointerexception executable-jar

评论

0赞 David Conrad 2/24/2022
运行 jar 文件时,当前目录可能不同,而 JSON 文件位于不同的目录中。您得到一个 NPE,因为即使打开文件失败,您也会尝试使用。这是错误的。你声明该方法会引发,但你使用你得到的任何此类异常,你不会引发它。但是你可以扔.您也不会关闭该文件。您应该使用 try-with-resourcesbrFileNotFoundExceptionJsonSyntaxException
0赞 Juan 2/25/2022
Jar 文件和 json 文件位于同一目录中。也许我发布了编辑 200 次后的代码不是很好,但问题不在于 jar 和 json 文件在同一个文件中。在我尝试打开文件的所有方式中,我都得到了NullPointerException
0赞 David Conrad 2/25/2022
jar 文件和 JSON 文件是否在同一个目录中并不重要,重要的是 jar 文件运行时 OS 和 JVM 对“当前目录”的概念是什么。我只是尝试了您的代码的精简版本(只是读取文件的第一行并将其返回而不是将其解析为 JSON),并且它起作用了。您可以通过此问题中的方法之一检查当前目录。

答: 暂无答案