从一个json文件中读取FileNotFoundException

时间:2016-08-20 19:14:51

标签: java android json filereader filenotfoundexception

我正在开发一个简单的应用程序,我试图了解如何使用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)

背后可能是什么原因?我在过去的几个小时里一直在研究这个问题而且我无法弄明白。 谢谢

3 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

你需要将json放在assets文件夹中。

  1. 在透视窗口中打开Project Perspective。
  2. 使用名称资产在android_test / test文件夹中创建目录,具体取决于您需要JSON响应的位置
  3. 现在简单地将您的JSON文件放在资产文件夹
  4. 只需调用他们的单个名称xyz.json
  5. 即可调用您的JSON