2016-08-20 12 views
0

私は単純なアプリケーションを開発していて、jsonパーサを使用してjsonファイルから読み込む方法を理解しようとしています。私は単純なjsonファイルを書いて、それを私のディレクトリの一つに入れました。その後、私はパスを取得するには、右クロックを使用し、次のコードを書いた:いくつかの理由からjsonファイルFileNotFoundExceptionから読み取る

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

私はメッセージがかなり明確だと思います。 Mybeはここにタイプ:Intereview? – Jens

+2

あなたは電話またはエミュレータのいずれかでアプリケーションを実行しており、コンピュータディスクのパスをどのように与えることができますか? – Shubham

+0

バディなし、アプリの名前ですtypoが目的のためです – 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デバイスのファイルではありません。

あなたの二つの主なオプションは以下のとおりです。res/raw/res/Data/から

  1. 移動することをJSONファイル。その後、getResources().openRawResource(R.raw.dataStructures)を使用してJSONにInputStreamを取得します。

  2. JSONファイルをres/Data/からassets/に移動します。その後、getAssets().open("dataStructures.json")を使用してJSONにInputStreamを取得します。

getResources()getAssets()は、ActivityとしてContext上の方法およびそのサブクラスであることに留意されたいです。

+0

お返事ありがとうございました。私はまだjsonを使い始めました。私が今理解していない唯一のことは、パーサーを使ってJSONObjectをどのように作成するのでしょうか? parseメソッドは、ReaderまたはStringを受け入れます。基本的に、私はどのようにInputStreamからReader/Stringに変換しますか? – baki1995

+0

@ baki1995:[InputStreamReader'](https://developer.android.com/reference/java/io/InputStreamReader.html)を使用してください。 – CommonsWare

0

アセットフォルダ内にjsonを配置する必要があります。

  1. パースペクティブウィンドウで、プロジェクトパースペクティブを開きます。
  2. あなたのJSONファイルは、資産フォルダ
  3. の内側に入れて、単にような彼らの単一の名前を呼び出すことによって、あなたのJSONを呼び出すあなたはJSONレスポンス
  4. 今すぐ簡単な必要がある場所に応じて、名前の資産を使用してandroid_test/testフォルダ内のディレクトリを作成します。 xyz.json
関連する問題