2016-08-20 75 views
0

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

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

这可能是背后的原因:某些原因

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(); 
    } 


} 

,我在运行应用程序时出现此错误?我一直对这个在过去的几个小时,我实在不明白它.. 感谢

+0

我觉得这个消息很清楚。 Mybe是这里的一个类型:'Intereview'? – Jens

+2

您正在手机或模拟器中运行应用程序,并给出计算机磁盘的路径它怎么可能? – Shubham

+0

没有好友,多数民众赞成在应用程序的名称..打字错误 – baki1995

回答

0

这似乎当文件不存在...

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

0

您对此问题有,所以我假定您正在尝试编写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

+0

非常感谢你的回答,我刚开始使用json,所以我还没有真正得到它。我现在唯一不了解的是,如何使用解析器创建JSONObject?解析方法接受一个Reader或一个String。基本上,我将如何从inputStream转换为Reader/String? – baki1995

+0

@ baki1995:使用[InputStreamReader'](https://developer.android.com/reference/java/io/InputStreamReader.html)。 – CommonsWare

0

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

  1. 在透视窗口中打开项目透视图。
  2. 与名字资产的android_test/test文件夹内,这取决于你需要JSON响应创建目录
  3. 现在简单的把你的JSON文件资产文件夹内
  4. 而且通过简单地调用它们就像一个名字叫你的JSON xyz.json