【问题标题】:Reading from A json file, FileNotFoundException从 json 文件读取,FileNotFoundException
【发布时间】:2016-08-20 19:14:51
【问题描述】:

我正在开发一个简单的应用程序,并试图了解如何使用 json 解析器从 json 文件中读取数据。我写了一个简单的 json 文件并将它放在我的一个目录中。然后我用正确的时钟来获取路径,并编写了以下代码:

public void myParser() {
    JSONParser parser = new JSONParser();

    String path = "C:\\Users\\My Name\\IntelliJIDEAProjects\\Intereview\\app\\src\\main\\res\\Data\\dataStructures.json";

    try{
        JSONArray topics = (JSONArray)parser.parse(new FileReader(path));
        for(int i=0;i<topics.length();i++) {
            JSONObject object = topics.getJSONObject(i);
            String title = object.optString("title").toString();
            Log.i(TAG,title);
        }

    }

    catch(JSONException e) {
        Log.e("Internal Problem", e.getMessage());
    } catch (ParseException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }


}

由于某种原因,我在运行应用程序时收到此错误:

java.io.FileNotFoundException: C:\Users\My Name\IntelliJIDEAProjects\Intereview\app\src\main\res\Data\dataStructures.json: open failed: ENOENT (No such file or directory)

这背后的原因是什么?在过去的几个小时里我一直在研究这个,我就是想不通.. 谢谢

【问题讨论】:

  • 我认为这个信息很清楚。我的类型在这里:Intereview?
  • 您在手机或模拟器中运行应用程序并给出计算机磁盘路径怎么可能?
  • 不,哥们,这是应用程序的名称.. 错字是故意的
  • 我以为我可以在模拟器中运行它,因为应用程序目录中的文件不是吗?那我该如何解决呢?

标签: java android json filereader filenotfoundexception


【解决方案1】:

您在这个问题上有,所以我假设您正在尝试编写一个 Android 应用程序。如果是这样,这将不起作用:

String path = "C:\\Users\\My Name\\IntelliJIDEAProjects\\Intereview\\app\\src\\main\\res\\Data\\dataStructures.json";

根据该路径,我的猜测是您正在尝试将 JSON 文件与您的应用程序打包在一起。在这种情况下,您也不能在res/ 下创建随机目录。即使此 JSON 文件位于正确的 res/ 目录中(例如,res/raw/),您也无法通过 FileReader 访问它。它是您的开发机器上的一个文件。它不是 Android 设备上的文件。

您的两个主要选择是:

  1. 将该 JSON 文件从 res/Data/ 移动到 res/raw/。然后,使用 getResources().openRawResource(R.raw.dataStructures) 在 JSON 上获取 InputStream

  2. 将该 JSON 文件从 res/Data/ 移动到 assets/。然后,使用 getAssets().open("dataStructures.json") 在 JSON 上获取 InputStream

注意getResources()getAssets()Context 及其子类的方法,例如Activity

【讨论】:

  • 非常感谢您的回答,我刚开始使用 json,所以我还没有真正理解它。我现在唯一不明白的是,您将如何使用解析器创建 JSONObject? parse 方法接受 Reader 或 String。基本上,我将如何从 inputStream 转换为 Reader/String?
  • @baki1995:使用an InputStreamReader
【解决方案2】:

当文件不存在时出现...

检查路径名(intereview?) 的拼写并...检查文件是否存在。

【讨论】:

    【解决方案3】:

    您需要将 json 放入 assets 文件夹中。

    1. 在透视窗口中打开 Project Perspective。
    2. 根据您需要 JSON 响应的位置,在您的 android_test/test 文件夹中创建名为 assets 的目录
    3. 现在简单地将您的 JSON 文件放入 assets 文件夹中
    4. 并通过简单地调用它们的单一名称来调用您的 JSON,例如 xyz.json

    【讨论】:

      猜你喜欢
      • 2015-12-05
      • 2014-01-26
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 2014-11-28
      • 2013-12-10
      相关资源
      最近更新 更多