Java listFiles-c驱动器的NullPointerException
为了兼容性,我正在尝试将一个应用程序从Java7降级到Java6。然而,使用Jave 6的listFiles()我在Windows机器上得到了c驱动器的NullPointerException(并且ishiden()返回true)。既然Java7的FileTreeWalker工作得很好,我想这不是Windows的问题,是吗?我使用了一段代码:Java listFiles-c驱动器的NullPointerException,java,file-io,Java,File Io,为了兼容性,我正在尝试将一个应用程序从Java7降级到Java6。然而,使用Jave 6的listFiles()我在Windows机器上得到了c驱动器的NullPointerException(并且ishiden()返回true)。既然Java7的FileTreeWalker工作得很好,我想这不是Windows的问题,是吗?我使用了一段代码: public class Filewalker { public void walk( String path ) { Fil
public class Filewalker {
public void walk( String path ) {
File root = new File( path );
File[] list = root.listFiles();
for ( File f : list ) {
if ( f.isDirectory() ) {
walk( f.getAbsolutePath() );
System.out.println( "Dir:" + f.getAbsoluteFile() );
}
else {
System.out.println( "File:" + f.getAbsoluteFile() );
}
}
}
public static void main(String[] args) {
Filewalker fw = new Filewalker();
fw.walk("c:\\" );
}
}
Bob试试看,他们可能会为您的案例提供跨JDK的解决方案
[更新]
我运行了您的代码,在使用JDK文档进行检查之后,listFiles
对不表示目录的路径返回null,现在查看代码,尽管您在递归调用walk之前检查当前文件是否为目录,但结果表明,在某些时候,目录被误认为是文件,这可能是由于Windows上的访问权限,我真的不太清楚为什么
让我认为它与权限有关的一个注意事项是,生成NullPointerException
的目录是“C:\Documents and Settings”,在此路径上调用listFiles
,返回null
该案例的临时解决方案是检查文件列表是否为空。您确切使用了哪个路径来列出您的文件?除非您向我们展示导致问题的代码,否则我们无法真正帮助您。(向我们展示有效的代码……毫无意义)好的,明白了。问题是
listFiles(“c:\\”)
返回null
。NPE只会发生,因为你没有测试空值。更新了我的问题,谢谢!这个NPE有3个选项。1.您的路径不存在2。listfiles尝试列出文件的文件,而不是目录3。I/O作为备用选项:是的,但我现在真的只是想找出这里的c驱动器出了什么问题。