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 を返すことです。

この場合の一時的な修正は、ファイル リストが null かどうかを確認することです。

于 2013-01-21T09:14:59.067 に答える