从json文件中读取,FileNotFoundException
我正在研究一个简单的应用程序,并试图了解如何使用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();
}
}
,我在运行应用程序时出现此错误?我一直对这个在过去的几个小时,我实在不明白它.. 感谢
这似乎当文件不存在...
检查的拼写你的路径名(intereview?)
和...检查文件是否存在。
您对此问题有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
。
非常感谢你的回答,我刚开始使用json,所以我还没有真正得到它。我现在唯一不了解的是,如何使用解析器创建JSONObject?解析方法接受一个Reader或一个String。基本上,我将如何从inputStream转换为Reader/String? – baki1995
@ baki1995:使用[InputStreamReader'](https://developer.android.com/reference/java/io/InputStreamReader.html)。 – CommonsWare
您需要将json放入assets文件夹中。
- 在透视窗口中打开项目透视图。
- 与名字资产的android_test/test文件夹内,这取决于你需要JSON响应创建目录
- 现在简单的把你的JSON文件资产文件夹内
- 而且通过简单地调用它们就像一个名字叫你的JSON xyz.json
我觉得这个消息很清楚。 Mybe是这里的一个类型:'Intereview'? – Jens
您正在手机或模拟器中运行应用程序,并给出计算机磁盘的路径它怎么可能? – Shubham
没有好友,多数民众赞成在应用程序的名称..打字错误 – baki1995