2017-05-05 11 views
0

私のアプリケーションのユーザーに内部電話機のメモリまたはSDカードに保存する選択肢を与えたい。SDカードに書き込むAndroid

内部::内容:/com.android.externalstorage.documents/tree/primary%3A

SD:私は、ユーザーの選択肢からFileを作成する場合は、URI(ファイル名なし)がのようなものです内容:/com.android.externalstorage.documents/tree/760E-F734%3A

しかし、私は次のコードを使用してこれらのディレクトリにファイルを書き込むしようとした場合、私はエラーを取得java.io.IOException: No such file or directory

File writePath = new File("content:/com.android.externalstorage.documents/tree/primary%3A") 

File file = new File(writePath, fileName); 

try { 
    file.createNewFile(); 
} catch (IOException e) { 
    Log.e("saveSurvey", "Failed to create file!" + e.getMessage()); 
    return false; 
} 

ファイルはどこかに書かれています

内容:このよう/com.android.externalstorage.documents/tree/primary%3A/ [私のファイル名]

私はマニフェストにWRITE_EXTERNAL_STORAGE許可を宣言しているので、私はそうではないと思います権限の問題が発生しますが、無効なパスの問題が発生します。

これらが有効なファイルパスでない場合は、SDカードに書き込む方法を教えてください。 Environment.getExternalStorageDirectory()を使用すると、常にデバイスの内部ストレージ( '/ storage/emulated/0')に書き込まれます。

+0

で許可を要求しなければならない上記のファイルを作成するときは、二つの概念を混合さEnvironment.getExternalStorageDirectory()

writePathとしてを使用してみてください'file' URIが必要です。https://developer.android.com/reference/java/io/File.htmlの詳細情報' Environment.getExternalStorageDirectory() 'から返されたパスが正しい場合、AVDは通常、外部ファイルをエミュレートしますこのパスに保存し、SDカードと外部ストレージを混同しないでください。https://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory() –

+0

@AlbertoMéndez情報をありがとう。 「外部」ストレージはSDカードかマウント可能なデバイスメモリのどちらでもかまいませんが、デバイスメモリではなくSDカードに書き込むにはどうすればよいですか? – petehallw

答えて

0

ファイルパスを確認してください。 は、getAbsolutePath()関数を呼び出し、パスが異なるデバイスで異なっているため、このエラーを取得writePath

File writePath = new File("content:/com.android.externalstorage.documents/tree/primary%3A") 
if(writePath.exists() && writePath.isDirectory()) { 
    //File extensions can be declared 
     File file = new File(writePath.getAbsolutePath(), fileName+ extensions); 
} 
+0

これは私が今日見た最もナンセンスです。 – greenapps

+0

@greenappsそれはどういう意味ですか? – redAllocator

+0

あなたが価格を獲得した;-)。 – greenapps

0

をチェックします。

することは、あなたが `content` URIの中を送信しているアンドロイド6に心に留めておいてください、あなたはランタイム

+0

しかし私は自分の投稿で言及したように、これは常にSDカードではなくデバイスの内部ストレージに書き込みます。 – petehallw

関連する問題