gpt4 book ai didi

java - 如何解决使用InputStream存储资源路径的空指针异常?

转载 作者:行者123 更新时间:2023-12-02 04:49:33 26 4
gpt4 key购买 nike

我正在尝试在 Windows 上的 Eclipse 项目中设置资源文件的文件路径,game.json,但是当我尝试从 InputStream 创建输入流字符串时,我收到 NullPointerException .

为了调试这个问题,我检查了我的资源的正确文件路径是否就位,看起来确实如此。另外,我在错误上设置了一个断点,它似乎发生在这一行:

String inputStreamString = new Scanner(source,"UTF-8").useDelimiter("\\A").next();

有人知道为什么使用给定路径找不到 JSON 文件吗?

这些是我引用资源的文件路径所采取的步骤,但我收到了 NPE:

private static final String GAME_FILE = "/game.json";
//I've also tried the path, "resources/game.json" but got the same error..

InputStream source = getClass().getClassLoader().getResourceAsStream(GAME_FILE);

String inputStreamString = new Scanner(source,"UTF-8").useDelimiter("\\A").next();

ObjectMapper mapper = new ObjectMapper();

// read from file, convert it to Location class
Location loc = mapper.readValue(new File(inputStreamString), Location.class);

这是我的项目树的结构:

project tree

这是抛出的错误:

Exception in thread "main" java.lang.NullPointerException: source
at java.util.Objects.requireNonNull(Unknown Source)
at java.util.Scanner.<init>(Unknown Source)
at gmit.GameParser.parse(GameParser.java:23)
at gmit.Main.main(Main.java:13)

最佳答案

您可能正在尝试读取资源文件 game.json 的 JSON 内容并使用ObjectMapper解析该 JSON 并将其反序列化为 Location目的。

Location loc = mapper.readValue(new File(inputStreamString), Location.class); 

ObjectMapper已经有 readValue 接受 InputStream 的方法。您不需要使用需要 File 的那个.

所以你可以拥有

InputStream source = getClass().getResourceAsStream(GAME_FILE); 
Location loc = mapper.readValue(source, Location.class);

请注意,类路径资源不一定可以通过 File 访问。实例,因为它不一定代表文件系统实体。

<小时/>

您的资源game.json在包裹中resources 。像这样检索它

private static final String GAME_FILE = "/resources/game.json";

(假设包 resources 在您的运行时类路径中。)

同时删除 getClassLoader调用

InputStream source = getClass().getClassLoader().getResourceAsStream(GAME_FILE); 

关于java - 如何解决使用InputStream存储资源路径的空指针异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29353599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com