我正在计算机中递归搜索文件。
private static File findFileDepthSearch(File dir, String fileName) {
File[] files = dir.listFiles();
for (File f : files) {
if (f.getName().equalsIgnoreCase(fileName)) {
return f;
}
}
for (File f : files) {
if (f.isDirectory()) {
File res = findFileDepthSearch(f, fileName);
if(res != null)
{
return res;
}
}
}
return null;
}
深入两层后,dir.listFiles
返回null
。然而,情况不应该是这样,因为有问题的文件实际上是一个目录。当我尝试在控制台中输入它时,它显示访问被拒绝,但根据 javadocs 安全问题应该引发异常。我在这里缺少什么?
将其添加到
if(files==null)
{
return null;
}
解决了问题,但为什么这是必要的?
最佳答案
documentation声明“如果此抽象路径名不表示目录,或者发生 I/O 错误,则返回 null。”
如果您无权访问文件系统级别的目录,则视为“I/O 错误”,因此该函数将返回 null
。
如果您创建 SecurityManager
并将其配置为限制对该目录的访问,它只会抛出 SecurityException
。
关于java - File.listFiles 抛出 NullPointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50065645/