我正在开发一个简单的应用程序,我试图了解如何使用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)
背后可能是什么原因?我在过去的几个小时里一直在研究这个问题而且我无法弄明白。 谢谢
答案 0 :(得分:1)
您对此问题有android,因此我假设您正在尝试编写Android应用。如果是这样,这将不起作用:
String path = "C:\\Users\\My Name\\IntelliJIDEAProjects\\Intereview\\app\\src\\main\\res\\Data\\dataStructures.json";
我的猜测,基于该路径,您试图使用您的应用程序打包JSON文件。在这种情况下,您无法在res/
下创建随机目录。即使此JSON文件位于正确的res/
目录中(例如res/raw/
),也无法通过FileReader
访问它。它是您的开发计算机上的文件。它不是Android设备上的文件。
您的两个主要选项是:
将该JSON文件从res/Data/
移至res/raw/
。然后,使用getResources().openRawResource(R.raw.dataStructures)
在JSON上获取InputStream
。
将该JSON文件从res/Data/
移至assets/
。然后,使用getAssets().open("dataStructures.json")
在JSON上获取InputStream
。
请注意,getResources()
和getAssets()
是Context
及其子类的方法,例如Activity
。
答案 1 :(得分:0)
当文件不存在时出现......
检查路径名(intereview?)
的拼写并检查文件是否存在。
答案 2 :(得分:0)
你需要将json放在assets文件夹中。