Java listFiles-c驱动器的NullPointerException

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

为了兼容性,我正在尝试将一个应用程序从Java7降级到Java6。然而,使用Jave 6的listFiles()我在Windows机器上得到了c驱动器的NullPointerException(并且ishiden()返回true)。既然Java7的FileTreeWalker工作得很好,我想这不是Windows的问题,是吗?我使用了一段代码:

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驱动器出了什么问题。