简体   繁体   中英

Reading from A json file, FileNotFoundException

I'm working on a simple app and im trying to understand how to read from a json file using a json parser. I wrote a simple json file and put it in one of my directories. Then I used right clock to get the path, and wrote the following code:

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


}

from some reason, i get this error when running the app:

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

what could be the reason behind that? i've been working on this for the past few hours and I just can't figure it out.. Thanks

You have on this question, so I assume that you are trying to write an Android app. If so, this will not work:

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

My guess, based on that path, is that you are trying to package a JSON file with your app. In that case, you cannot create random directories under res/ either. Even if this JSON file were in a proper res/ directory (eg, res/raw/ ), you cannot access it via a FileReader . It is a file on your development machine. It is not a file on the Android device.

Your two main options are:

  1. Move that JSON file from res/Data/ into res/raw/ . Then, use getResources().openRawResource(R.raw.dataStructures) to get an InputStream on the JSON.

  2. Move that JSON file from res/Data/ into assets/ . Then, use getAssets().open("dataStructures.json") to get an InputStream on the JSON.

Note that getResources() and getAssets() are methods on Context and its subclasses, such as Activity .

This appears when the file isn't there...

Check the spelling of your pathname (intereview?) and... check if the file is there.

you need to put json inside the assets folder.

  1. In the perspective window open the Project Perspective.
  2. Create the directory inside your android_test/test folder with name assets depending upon where you need the JSON response
  3. Now simple put your JSON file inside the assets folder
  4. And call your JSON by simply calling their single name like xyz.json

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM