2016-04-26 9 views
1

私はGalaxy S4のSDカードにArrayListを格納することに苦労しています。適切に私はもはやファイルを取得する権限を追加した後Android SDK外部ストア、ファイルが見つかりません

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を:私は自分で把握することができないような理由から、私は、コードのこの部分では、ファイルが見つかりませんでした例外を取得しておきます例外は見つかりませんが、代わりにIOExceptionが発生します。 Iは、デバイスモニターにいくつかのシステムエラーに気づいた:

4月26日13:54:15.115:D/ViewRootImpl(27953):ViewPostImeInputStage ACTION_DOWN 4月26日13:54:20.130:D/ViewRootImpl(27953)。 ViewPostImeInputStage ACTION_DOWN 04-26 13:54:20.270:W/System.err(27953):java.io.IOException:ファイル記述子が閉じられました 04-26 13:54:20.280:W/System.err(27953):at libcore.io.Posix.writeBytes(ネイティブメソッド) 04-26 13:54:20.310:W/System.err(27953):libcore.io.Posix.write(Posix.java:223) 04-26 13 :54:20.310:W/System.err(27953):libcore.io.BlockGuardOs.write(BlockGuardOs.java:313) 04-26 13:54:20.310:W/System.err(27953):at libcore .io.IoBridge.write(IoBridge.java:497) 04-26 13:54:20.310:W/System.err(27953):java.io.FileOutputStream.write(FileOutputStream.java:186) 04-26 13:54:20.310:W/System.err( 27953):java.io.OutputStreamWriter.flushBytes(OutputStreamWriter.java:167) 04-26 13:54:20.310:W/System.err(27953):java.io.OutputStreamWriter.close(OutputStreamWriter.java: (MainActivity.java:142) 04-26 13:54:20.310:00: W/System.err(27953):com.example.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):android.view.View.performClick(View.ja (View.java:20926) 04-26 13:54:20.310:0 android.view.Viewで$ PerformClick.run(View.java:20926) 13:54:20.310:W/System.err(27953) W/System.err(27953):android.os.Handler.handleCallback(Handler.java:739) 04-26 13:54:20.310:W/System.err(27953):android.os.Handler。ディスパッチメッセージ(Handler.java:95) 04-26 13:54:20.310:W/System.err(27953):android.os.Looper.loop(Looper.java:145) 04-26 13:54: 20.310:W/System.err(27953):android.app.ActivityThread.main(ActivityThread.java:5951) 04-26 13:54:20.320:W/System.err(27953):java.lang。メソッドを呼び出す(ネイティブメソッド) 04-26 13:54:20.320:W/System.err(27953):java.lang.reflect.Method.invoke(Method.java:372) 04-26 13 :54:20.320:W/System.err(27953):com.android.internal.os.ZygoteIniで(ZygoteInit.java:1400) 04-26 13:54:20.320:W/

私は以前d.logを使っていないので、私はここで何を見ているのか完全にはわかりません。

+0

'Environment.getExternalStorageDirectory()'は、これがあなたのsdcardパスを返すことを決して保証しません。外部にマウントされたストレージを確認します。詳細はこちらhttp://developer.android.com/guide/topics/data/data-storage.html#filesExternal –

+0

そこに書き込むにはWRITE_EXTERNAL_STORAGE権限が必要です。あなたはそれが正しく設定されていると思うなら、[私のこのブログの投稿](https://commonsware.com/blog/2015/08/31/hey-where-my-permission-go.html)の概要あなたがまだこの許可を得ていない理由のいくつかの一般的な理由。また、あなたの質問を編集し、LogCatに表示されるはずのJavaスタックトレースを投稿することを検討することもできます。 – CommonsWare

+0

リンクのみんなありがとう。私はそれらをチェックします。 その後、Javaスタックトレースを投稿する方法について説明します。 –

答えて

0
  1. AndroidManifest.xmlでアクセス許可を確認してください。 READ &外部ストレージの書き込み権限が必要です。
  2. 別のディレクトリを使用してください。たとえば、getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
+0

迅速な対応に感謝します。私は、マニフェストで読み取りと書き込みの両方の権限を持っていますが、最初はEnvironment.DIRECTORY_DOCUMENTSにデータを格納しようとしましたが、ファイルが見つかりません例外が発生しました。 –

0

だから私はそれを理解しました。最初に、アプリケーションを「再実行」したときにパーミッションを忘れてしまった(最初の試みはあまりにも面倒です) - これはFile Not Found Exceptionを解決しました!

次に、OutputStreamWriterをフラッシュしていなかったためにIOExceptionが発生しました。

関連する問題