【问题标题】:Reader/getResourceAsStream returns null [duplicate]Reader/getResourceAsStream 返回 null [重复]
【发布时间】:2017-07-03 18:57:05
【问题描述】:

我正在尝试从 json 文件读取到阅读器,以便将其解析为 java 对象:`

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class main {

    public static void main(String[] args) throws IOException{

        try(Reader reader = new InputStreamReader(main.class.getResourceAsStream(
               "/Users/edwardk/IdeaProjects/practice_json/small_incidents.json"),"UTF-8")){
            Gson gson = new GsonBuilder().create();
            Person p = gson.fromJson(reader, Person.class);
            System.out.println(p);
        }
    }
}

`

我在运行时遇到 NullPointerException。

【问题讨论】:

  • getResourceAsStream() 从类路径中获取资源。要从文件系统中读取文件,请使用 FileInputStream。

标签: java json


【解决方案1】:

你的代码不错,但是出现NullPointerException是因为

main.class.getResourceAsStream(
               "/Users/edwardk/IdeaProjects/practice_json/small_incidents.json"),"UTF-8")

返回空值。尝试将 json 文件粘贴到与 main.java 相同的目录并更改:

main.class.getResourceAsStream(
               "small_incidents.json"),"UTF-8")

或者指定small_ingredients.json的正确相对路径

【讨论】:

  • 这确实是问题所在,我已经通过将 json 文件移动到 Recourses 目录来解决它。
【解决方案2】:

Resources 不是files,并且那个路径/Users/edwardk/... 看起来像一个文件路径。

您应该使用Files API 从文件中读取,如果您使用的是 Windows,则您的路径需要以C:/ 开头,而不是/。如果您打算将文件作为资源加载,则应使用相对于类路径的文件路径。例如,如果practice_json 目录在您的类路径中,您可能只需要使用"small_incidents.json"

【讨论】:

    猜你喜欢
    • 2011-02-17
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 2011-07-11
    • 2013-10-02
    • 2013-06-21
    • 1970-01-01
    相关资源
    最近更新 更多