1

我正在尝试访问我的 Android 手机中的文件,下面的代码用于它:

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

它在 list() 函数上抛出一个空指针,这意味着它不是文件/目录。但是,如果我将路径更改为 /storage/,它会打印一堆文件夹,包括 sdcard0。我知道 sdcard0 实际上是一个文件夹/文件,因为我还为我的手机下载了一个文件管理器并浏览了这些文件。许多人建议使用 getExternalStorageDirectory(),但这会导致相同的空指针。

我添加了这些权限:

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

编辑:我看过的众多网站之一 android 空指针错误

更新:我使用 isDirectory() 检查了它是否是一个文件夹,它返回 true,然后我尝试了 canRead(),它返回 false,也许是权限问题?

4

5 回答 5

1

Environment.getExternalStorageState() 这将为您提供外部存储而不是路径的状态。检查路径请使用 Environment.getExternalStorageDirectory().getAbsolutePath()。

根据您提到的“共享”状态,您似乎正在通过 USB 电缆将其访问到系统中时进行测试。因为“共享”状态意味着“媒体存在但未安装,并通过 USB 大容量存储共享”。

于 2014-03-03T07:13:00.967 回答
1

最后我想通了,如果您滑动顶部菜单栏(接收通知的位置),则会出现“已连接为媒体设备”,如果您单击有更多设置,并且启用“媒体设备(MTP)”,则不会当我通过 USB 将它插入电脑时,拥有这套设备会自动卸载我的 sdcard。

于 2014-03-03T06:37:54.347 回答
1
final File folder = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
for (final String fileEntry : folder.list()) {
 System.out.println(fileEntry);
}
于 2014-03-03T05:56:55.903 回答
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 回答
0

尝试通过以下方式获取外部存储路径:

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

它返回外部存储的路径并与您正在编写的内容进行交叉检查。

于 2014-03-03T05:55:48.280 回答