1

Android フォン内のファイルにアクセスしようとしていますが、以下のコードが使用されています。

final File folder = new File("/storage/sdcard0/");
        for (final String fileEntry : folder.list()) {
            System.out.println(fileEntry);
        }

list() 関数で null ポインターをスローします。これは、ファイル/ディレクトリではないことを意味します。ただし、パスを /storage/ に変更すると、sdcard0 を含む一連のフォルダーが出力されます。携帯電話用のファイルマネージャーもダウンロードしてファイルを調べたので、sdcard0が実際にはフォルダー/ファイルであることはわかっています。多くの人が getExternalStorageDirectory() の使用を提案していますが、それは同じ null ポインターになります。

これらの権限を追加しました:

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

編集:私が見た多くのサイトの1つ アンドロイドヌルポインターエラー

更新: isDirectory() を使用してフォルダーであるかどうかを確認したところ、true が返された後、canRead() を試したところ、false が返されました。権限の問題でしょうか?

4

5 に答える 5

1

最後に、上部のメニュー バー (通知を受け取る場所) をスライドすると、[メディア デバイスとして接続] が表示され、それをクリックするとその他の設定が表示され、[メディア デバイス (MTP)] を有効にすると、このセットを持っていると、USB経由でコンピューターに接続したときに、SDカードが自動的にアンマウントされました。

于 2014-03-03T06:37:54.347 に答える
1

Environment.getExternalStorageState() これは、パスではなく外部ストレージの状態を示します。パスを確認するには、Environment.getExternalStorageDirectory().getAbsolutePath() を使用してください。

そして、あなたが言及した「共有」状態によると、USBケーブルを介してシステムにアクセスしているときにテストしていたようです。「共有」状態とは、「マウントされていないメディアが存在し、USBマスストレージ経由で共有されている」ことを意味するためです。

于 2014-03-03T07:13:00.967 に答える
0

これを介して外部ストレージへのパスを取得してみてください:

  System.out.println(Environment.getExternalStorageState());

外部ストレージへのパスを返し、書いている内容とクロスチェックします。

于 2014-03-03T05:55:48.280 に答える
0

このコードを試すことができますか

final File folder = new File("/storage/sdcard");

    if (folder.getAbsoluteFile().exists()) {
        for (final String fileEntry : folder.getAbsoluteFile().list()) {
            System.out.println(fileEntry);
        }
    }
于 2014-03-03T06:07:48.730 に答える