0

为了兼容性,我正在尝试将应用程序从 Java 7 降级到 Java 6。但是,使用 Jave 6 的 listFiles() 我在 Windows 机器上的 c 驱动器上得到 NullPointerException(并且 isHidden() 返回 true)。由于 Java 7 的 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:\\" );
    }
}

鲍勃

4

1 回答 1

2

试试Apache Commons IO,他们可能会为您的案例提供跨 JDK 解决方案。

[更新]我运行了您的代码,并在检查了 JDK 文档后,listFiles为不表示目录的路径返回 null,现在查看代码,尽管您在递归调用之前检查当前文件是否是目录走,事实证明,在某些时候,一个目录被误认为是一个文件,这可能是由于 Windows 上的访问权限我不太清楚为什么!

一个让我认为它与权限有关的注释是,产生的目录NullPointerException是'C:\ Documents and Settings',listFiles在这个路径上调用,返回null。

这种情况的临时解决方法是检查文件列表是否为空。

于 2013-01-21T09:14:59.067 回答