我正在尝试访问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 null pointer error
更新: 我检查它是否是使用isDirectory()的文件夹,并返回true,然后我尝试了canRead()并返回false,也许这是一个权限问题?
答案 0 :(得分:1)
final File folder = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
for (final String fileEntry : folder.list()) {
System.out.println(fileEntry);
}
答案 1 :(得分:1)
最后我想通了,如果你滑动顶部菜单栏(你收到通知的地方)那就是“连接为媒体设备”,如果你点击那里有更多的设置,并且你启用了“媒体设备(MTP) “当我通过USB将它插入我的计算机时,没有这个设置是自动卸载我的SD卡。
答案 2 :(得分:1)
Environment.getExternalStorageState()这将为您提供外部存储状态而不是Path。 要检查路径,请使用Environment.getExternalStorageDirectory()。getAbsolutePath()。
根据您提到的“共享”状态,当您通过USB线缆访问系统时,您似乎正在测试。 因为“共享”状态意味着“媒体不存在,并通过USB大容量存储共享”。
答案 3 :(得分:0)
尝试通过以下方式获取外部存储路径:
System.out.println(Environment.getExternalStorageState());
返回外部存储的路径,并用你正在编写的内容进行交叉检查。
答案 4 :(得分:0)
你能试试这段代码吗?
final File folder = new File("/storage/sdcard");
if (folder.getAbsoluteFile().exists()) {
for (final String fileEntry : folder.getAbsoluteFile().list()) {
System.out.println(fileEntry);
}
}