私は私の電話のメモリに何かを書き込もうとします。
最初に、パスを次のようにハードコーディングしました。
_myFile = new File("/sdcard/" + txtName.getText() + ".txt");
_
これはまったく問題ありません。
そして、Eclipseは私にそのようなパスをハードコーディングするべきではないという警告を私に与えます、代わりに私は次のことをすべきです:
_myFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/"+ txtName.getText() + ".txt");
_
次に、修正提案に従って警告を回避します。
しかし、ライタークラスでランタイム例外が発生しました。
次に、デバッグ用にEnvironment.getExternalStorageDirectory().getAbsolutePath()
を出力します。結果は
/ storage/sdcard0
。しかし、以前に完全に正常に機能したハードコードされたものは実際には
/SDカード
。
なぜこれが起こるのですか?
警告を回避したい場合は、パスをハードコーディングする代わりに、「正式で正しい」方法でパスディレクトリを取得するにはどうすればよいですか?
PS:私の電話はHTC One Xで、外部SDカードスロットがありません。 32GBのストレージにはSDカードが内蔵されていると思いますので、本質は同じであるはずです。
なぜこれが起こるのでしょうか?
外部ストレージへのパスは何年にもわたって変化しているため、そもそもパスをハードコード化してはならないはずです。
パスをハードコーディングする代わりに、より「形式的で正しい」方法でパスディレクトリを取得するにはどうすればよいですか?
Environment.getExternalStorageDirectory()
を使用します。
テスト環境では、/sdcard
は/storage/sdcard0
へのシンボリックリンクまたはハードリンクであり、デバイスの製造元によって設定されています。ただし、allデバイスにそのような/sdcard
シンボリックリンクがあることは保証されません。
32GBのストレージにはSDカードが内蔵されていると思います
外部ストレージは、オンボードの32GBフラッシュメモリの一部です。
.getAbsolutePath()を削除すれば問題ありません。 Environment.getExternalStoreDirectory()は、製造元が外部ストレージを設定した場所へのパスを提供します。