无法在Java中读取json文件

时间:2019-05-10 10:42:21

标签: java json eclipse

我正在使用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");
}

3 个答案:

答案 0 :(得分:1)

正如您所说的,您使用Eclipse,我假设您也通过Eclipse运行代码。 默认情况下,在Eclipse中执行Java程序时的工作目录是项目的根文件夹。 因此,建议您将jsonfile.json放在项目的根文件夹中,而不要放在src/main/...上。

此外,您不应该抓住Exception。捕获更具体的内容,例如IOExceptionJSONException,然后显示异常消息(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));