2016-11-02 3 views
0

Ich habe einen Code geschrieben, um eine JSON-Datei von einer SD-Karte zu lesen.Datei nicht gefunden Ausnahme durch Lesen einer JSON-Datei

Zum ersten speichern ich den Pfad für meine 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(); 
    } 

Danach habe ich lege den config.json in die Ordner und will mit dieser Methode die JSON-Datei von der SD-Karte lesen.

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; 

} 

Danach i Daten aus der Datei

JSONObject obj = new JSONObject(loadJSONFromAsset()); 

aber zu bekommen, wenn ich den Code durch den Debugger laufen bekomme ich die Meldung über die Ex:

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

Haben Sie überprüft, config.json Datei ist in MyIdea oder nicht? –

+0

Ja, ich habe es auf meinem Gerät überprüft. http://fs5.directupload.net/images/161102/vkcdfgtc.png – dudi

+0

Haben Sie Lese-/Schreibberechtigung? –

Antwort

1

Die Datei ist nicht in Ihrem Ordner assets, aber Sie verwenden immer noch getAssets. Die Datei in der SD-Karte kann wie jede normale Datei in Java geöffnet werden.

die Sie interessieren,

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

auch sicherstellen, dass Sie die folgende Berechtigung in Manifest haben.

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

Sie einen Puffer mit einer Größe gleich wie die Dateigröße nicht erstellen. Wenn die Datei eine große Datei ist, besteht eine hohe Wahrscheinlichkeit, dass Sie auf OutOfMemoryException stoßen.

+1

Funktioniert gut. Rette meinen Tag. Danke vielmals! – dudi

Verwandte Themen