提问人:Craig Archer 提问时间:10/19/2021 更新时间:10/19/2021 访问量:4664
NullPointerException:尝试获取 null 数组的长度
NullPointerException: Attempt to get length of null array
问:
我正在开发一个 Android 应用程序。我有以下代码来编写特定文件夹中以 XLR 开头的所有文件的列表:
private List<File> getListFiles(File parentDir) {
ArrayList<File> inFiles = new ArrayList<File>();
File[] files = parentDir.listFiles();
for (File file : files) {
try {
if ((file.exists()) && (file != null)) {
if (file.isDirectory()) {
inFiles.addAll(getListFiles(file));
} else {
if (file.getName().startsWith("XLR")) {
inFiles.add(file);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
return inFiles;
}
在 Android 10 和 11 上,这似乎是一个问题。对于 Android 10,我启用了旧存储,而 Android 11 我可以访问所有文件。所以问题不在于文件访问。 文件夹本身可能不在我的应用文件夹中,因此需要能够列出文件
我知道 NPE 上有一个广泛的页面,我已尽力遵循那里的建议(我正在检查文件是否存在并且不是 null),但仍然无济于事。
我觉得可能有一些愚蠢的东西,一个更有经验的程序员可能会在 2 秒内挑出来......
答:
1赞
Daniel Campos Olivares
10/19/2021
#1
只需阅读实际软件包的文档,即可轻松解决此问题。File
关于该方法的文档:File::listFiles
一个抽象路径名数组,表示此抽象路径名表示的目录中的文件和目录。如果目录为空,则数组将为空。如果此抽象路径名不表示目录,或者发生 I/O 错误,则返回 null。
正如你所看到的,该方法实际上可以返回,而不仅仅是一个空数组,所以你应该在尝试遍历它之前检查该值是否为空。null
评论
0赞
Craig Archer
10/22/2021
谢谢你 - 我把前几行改成了这个:private List<File> getListFiles(File parentDir) { ArrayList<File> inFiles = new ArrayList<File>();文件[] files = parentDir.listFiles();如果(文件 != null) {
评论