我正在使用eclipse读取jsonfile。我将jsonfile放在src-> main-> java-> testjson-> jsonfile.json中。现在,我正在尝试读取jsonfile。但是我的程序无法找到该文件。我得到的输出为“ nothing”。这是我已经实现的代码:
JsonParser parser = new JSONParser();
try{
Object obj = parser.parse(new FileReader("jsonfile.json"));
JSONObject jsonObject = (JSONObject) obj;
String name = (String) jsonObject.get("name");
}
catch(Exception e){
System.out.println("nothing");
}
答案 0 :(得分:1)
正如您所说的,您使用Eclipse,我假设您也通过Eclipse运行代码。
默认情况下,在Eclipse中执行Java程序时的工作目录是项目的根文件夹。
因此,建议您将jsonfile.json
放在项目的根文件夹中,而不要放在src/main/...
上。
此外,您不应该抓住Exception
。捕获更具体的内容,例如IOException
或JSONException
,然后显示异常消息(e.getMessage()
),这样可以更轻松地解决问题。
答案 1 :(得分:1)
您在项目中的文件称为“资源”,它将被捆绑在生成的jar
文件中。
在maven
项目中,此类文件位于特殊文件夹resources
中(例如src/main/resources/testjson/jsonfile.json
),在许多其他项目类型中,这些文件位于java
文件的正下方
因此,您无法使用FileReader
来读取它,因为它不是常规文件,而是压缩在jar
文件中。
您要做的就是用this.getClass().getResourceAsStream("/testjson/jsonfile.json")
读取文件。
您的解析器应该能够从InputStream
而不是Reader
进行读取。
如果没有,请使用正确编码的InputStreamReader
(JSON文件应为UTF-8,但这取决于...)
代码:
try (InputStream is = this.getClass().getResourceAsStream("/testjson/jsonfile.json"); ) {
Object obj = parser.parse(is);
} catch (Exception ex) {
System.out.println("failed to read: "+ex.getMessage());
}
解析器不支持InputStream
时的代码:
try (InputStream is = this.getClass().getResourceAsStream("/testjson/jsonfile.json");
Reader rd = new InputStreamReader(is, "UTF-8"); ) {
Object obj = parser.parse(rd);
} catch (Exception ex) {
System.out.println("failed to read: "+ex.getMessage());
}
答案 2 :(得分:-1)
提供JSON文件的完整路径而不是文件名。
如果文件路径为home / src / main / java / testjson / jsonfile.json
String path = "home/src/main/java/testjson/jsonfile.json";
Object obj = parser.parse(new FileReader(path));