2016-11-02 13 views
0

SDカードからJSONファイルを読み込むコードを書きました。ファイルが見つかりませんJSONファイルを読み取って例外が発生しました

初めての場合、私は自分のappfolderのパスを保存します。

Boolean isMounted = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); 
    if (isMounted) { 
     File Dir = new File(Environment.getExternalStorageDirectory(), "MyIdea"); 
     //creat folder if don't exist 
     if (!Dir.exists()) { 
      if (!Dir.mkdir()) { 
       Log.d("MyIdea", "failed to create"); 
      } 
     } 
     //set the absolutPath to appPathString 
     appDataPath = Dir.getAbsolutePath(); 
    } 

その後、config.jsonをフォルダに入れて、この方法でSDカードからJSONファイルを読み込みたいとします。

public String loadJSONFromAsset() { 
    String json = null; 
    try { 

     InputStream is = getAssets().open(appDataPath + "/config.json"); 

     int size = is.available(); 

     byte[] buffer = new byte[size]; 

     is.read(buffer); 

     is.close(); 

     json = new String(buffer, "UTF-8"); 


    } catch (IOException ex) { 
     ex.printStackTrace(); 
     return null; 
    } 
    return json; 

} 

その後、私は、ファイルから

JSONObject obj = new JSONObject(loadJSONFromAsset()); 

データを取得したい。しかし、私はデバッガによるコードを実行する場合、私は元のメッセージが表示されます。

java.io.FileNotFoundException: /storage/emulated/0/MyIdea/config.json 
+0

config.jsonファイルがMyIdeaにあるかどうかチェックしましたか? –

+0

はい、デバイス上でチェックしました。 http://fs5.directupload.net/images/161102/vkcdfgtc.png – dudi

+0

あなたに読み書き権限がありますか? –

答えて

1

ファイルがありますassetsフォルダにはありませんが、依然としてgetAssetsを使用しています。 sdcardのファイルは、javaの通常のファイルと同様に開くことができます。

public String loadJSON() { 
    String json = ""; 
    try { 
     BufferedReader reader = new BufferedReader(new FileReader(appDataPath + "/config.json")); 
     String line; 
     StringBuilder buffer = new StringBuilder(); 
     while ((line = reader.readLine()) != null) { 
      buffer.append(line); 
     } 
     reader.close(); 
     json = buffer.toString(); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    return json; 
} 

また、あなたがマニフェストに次の権限を持っていることを確認し、これを試してみてください。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 

ファイルサイズと同じサイズのバッファを作成しないでください。ファイルが大きいファイルの場合は、OutOfMemoryExceptionに実行される可能性が高くなります。

+1

素晴らしい作品です。私の一日を節約する。どうもありがとう! – dudi

関連する問題