文件存在且 IS 目录,但 listFiles() 返回 null

2022-08-31 11:36:21

File.listFiles() 的文档建议,只有在调用它的文件不是目录的情况下才会返回。null

我有以下几点:

String dir = "/storage/emulated/0";
File f = new File(dir);
Log.v("Files",f.exists()+"");
Log.v("Files",f.isDirectory()+"");
Log.v("Files",f.listFiles()+"");

日志显示:

true
true
null

由于某种原因,) 即使 被识别为有效目录,也会返回 。我对Android文件层次结构行为不是很熟悉,所以我想问题就在那里。listFiles(nullFile

作为参考,我正在我的Moto X上进行调试,无论手机是否插入我的计算机,结果都是相同的 - 所以我认为它与插入时的安装无关。


答案 1

对于那些有这个问题的人,请将其添加到AndroidManifest.xml:

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

:D解决问题

编辑:如果这不起作用,只需确保路径是否正确


答案 2

除了其他答案和评论,我建议你检查一下你是否需要

<application android:requestLegacyExternalStorage="true"

在你的清单中。似乎最近的一些api需要它。

无论如何,zapl的评论相当简短,但非常有见地。您可以“ls -ld”设备上的目录(通过“adb shell”或其他一些shell)。如果您对目录具有“r”权限,则可以调用listFiles()。否则,它将返回 null。请注意,如果您知道文件名并且对该目录具有“x”权限,则可以访问不可读目录下的文件。您可以通过“whoami”和“groups”命令知道您是谁。