2016-04-26 4 views
1

Ich habe mit dem Speichern einer ArrayList auf der SD-Karte eines Galaxy S4 gekämpft. Aus Gründen, die ich nicht meinem eigenen scheinen, um herauszufinden, ich erhalte Datei nicht Ausnahme in diesem Stück Code gefunden:Android SDK Externer Speicher, Datei nicht gefunden

File file = new File(Environment.getExternalStorageDirectory(), name); 

     if(file.exists()) file.delete(); 
     try{     
       OutputStream os = new FileOutputStream(file); 
       OutputStreamWriter osw = new OutputStreamWriter(os); 
       for(int j = 0; j < fallList.size(); j++) 
       osw.write(fallList.get(j)); 
       os.close(); 
       osw.close(); 

      } catch (FileNotFoundException e){ 

       Toast.makeText(getApplicationContext(),"File Not Found",Toast.LENGTH_LONG).show(); 

       e.printStackTrace(); 
      } 

EDIT:

Nach dem korrekten Hinzufügen von Berechtigungen erhalte ich nicht mehr Datei Nicht gefundene Ausnahme, sondern IOException. Ich habe bemerkt, einige Systemfehler in dem Gerätemonitor:

04-26 13: 54: 15,115: D/ViewRootImpl (27953): ViewPostImeInputStage ACTION_DOWN 04-26 13: 54: 20.130: D/ViewRootImpl (27953): ViewPostImeInputStage ACTION_DOWN 04-26 13: 54: 20.270: W/System.err (27953): java.io.IOException: Dateibeschreibung geschlossen 04-26 13: 54: 20.280: W/System.err (27953): um libcore.io.Posix.writeBytes (Native Methode) 04-26 13: 54: 20.310: W/System.err (27953): at libcore.io.Posix.write (Posix.java:223) 04-26 13 : 54: 20.310: W/System.err (27953): bei libcore.io.BlockGuardOs.write (BlockGuardOs.java:313) 04-26 13: 54: 20.310: W/System.err (27953): bei libcore .io.IoBridge.write (IoBridge.java:497) 04-26 13: 54: 20.310: W/System.err (27953): at java.io.FileOutputStream.write (FileOutputStream.java:186) 04-26 13: 54: 20.310: W/System.err (27953): at java.io.OutputStreamWriter.flushBytes (OutputStreamWriter.java:167) 04-26 13: 54: 20.310: W/System.err (27953): at java.io.OutputStreamWriter.close (OutputStreamWriter.java: 140) 04-26 13: 54: 20.310: W/System.err (27953): at com.beispiel.med603.sharedpreffalldetect.MainActivity.toFile (MainActivity.java:142) 04-26 13: 54: 20.310: W/System.err (27953): at com.beispiel.med603.sharedpreffalldetect.MainActivity.access $ 000 (MainActivity.java:35) 04-26 13: 54: 20.310: W/System.err (27953): at com .example.med603.sharedpreffalldetect.MainActivity $ 2.onClick (MainActivity.java:73) 04-26 13: 54: 20.310: W/System.err (27953): bei android.view.View.performClick (View.ja va: 5197) 04-26 13: 54: 20.310: W/System.err (27953): bei android.view.View $ PerformClick.run (View.java:20926) 04-26 13: 54: 20.310: W/System.err (27953): bei android.os.Handler.handleCallback (Handler.java:739) 04-26 13: 54: 20.310: W/System.err (27953): bei android.os.Handler. dispatchMessage (Handler.java:95) 04-26 13: 54: 20.310: W/System.err (27953): bei android.os.Looper.loop (Looper.java:145) 04-26 13:54: 20.310: W/System.err (27953): bei android.app.ActivityThread.main (ActivityThread.java:5951) 04-26 13: 54: 20.320: W/System.err (27953): at java.lang. reflect.Method.invoke (Native Methode) 04-26 13: 54: 20.320: W/System.err (27953): at java.lang.reflect.Method.invoke (Methode.java:372) 04-26 13 : 54: 20.320: W/System.err (27953): bei com.android.internal.os.ZygoteIni t $ MethodAndArgsCaller.run (ZygoteInit.java:1400) 04-26 13: 54: 20.320: W/System.err (27953): um com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1195)

Ich habe d.log vorher nicht verwendet, also bin ich mir nicht ganz sicher, was ich hier ansehe.

+0

'Environment.getExternalStorageDirectory()' wird niemals garantieren, dass dies Ihren SDcard-Pfad zurückgibt. Suchen Sie nach extern montiertem Speicher. Lesen Sie hier mehr http://developer.android.com/guide/topics/data/data-storage.html#filesExternal –

+0

Sie benötigen die 'WRITE_EXTERNAL_STORAGE' Berechtigung, um dort zu schreiben. Wenn du denkst, dass du das richtig eingerichtet hast, [dieses Blogposts von mir] (https://commonsware.com/blog/2015/08/31/hey-where-did-my-permission-go.html) umreißt einige häufige Gründe, warum Sie diese Berechtigung möglicherweise noch nicht haben. Sie könnten auch in Betracht ziehen, Ihre Frage zu bearbeiten und den Java-Stack-Trace zu posten, den Sie in LogCat sehen sollten. – CommonsWare

+0

Danke für die Links Jungs. Ich werde es überprüfen. Ich werde danach den Java-Stack-Trace veröffentlichen! –

Antwort

0
  1. Überprüfen Sie Ihre Berechtigungen in AndroidManifest.xml. Sie benötigen READ & WRITE-Berechtigung für externen Speicher.
  2. Versuchen Sie, ein anderes Verzeichnis zu verwenden. Zum Beispiel getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
+0

Danke für die schnelle Antwort. Ich habe Berechtigungen im Manifest, sowohl zum Lesen als auch zum Schreiben, und zuerst habe ich versucht, die Daten in Environment.DIRECTORY_DOCUMENTS zu speichern - auch Datei nicht gefunden Ausnahme. –

0

Also habe ich es herausgefunden; Erstens habe ich die Berechtigungen vergessen, als ich die Anwendung "re-ded" habe (Der erste Versuch wurde zu unordentlich) - dies löste die Ausnahme "Datei nicht gefunden"!

Ich bekam dann eine IOException, die zu sein scheint, weil ich den OutputStreamWriter nicht löschte.