使用File.listFiles()时,IntelliJ"可能会导致NullPointerException"警告

Mik*_*.K. 5 java intellij-idea

这是仍然生成警告的最小示例:

File searchpath = new File(path);
for(File file: searchpath.listFiles()){ ... }
Run Code Online (Sandbox Code Playgroud)

(path是传递给此方法的字符串)

for循环的第二行触发IDE警告:

Dereference of searchPath.listFiles() may produce 'java.lang.NullPointerException'

鉴于我刚刚初始化变量,并且我的程序正常工作,我的第一直觉是这是一个垃圾警告.

这是一个有效的警告,如果是,我该如何清除它?

*EDIT1

如果你给它一个空路径,文件,根据它的Javadoc,将抛出一个NPE.因此,清除错误似乎是一个注释path参数的情况,因此它已知永远不会为null.

Han*_*k D 8

警告的原因是listFiles()将null在某些条件下返回.根据文档,null如果path不引用目录,或者访问时发生I/O错误,它将返回.为了防止这种可能性并消除警告,您可以这样做:

File searchpath = new File(path);
File[] files = searchpath.listFiles();
if(files == null){
    // handle path not a directory, or other error
} else {
    for(File file: files){ ... }
}
Run Code Online (Sandbox Code Playgroud)

请参阅https://docs.oracle.com/javase/7/docs/api/java/io/File.html#listFiles()