0

Java を使用して、.exe ファイルを再帰的に検索するメソッドを作成しようとしています。私が抱えている問題は、「C:\Program Files (x86)\Google\CrashReports」のディレクトリに関してです。

何をしようとしても、このファイルが原因で常に NullPointerException が発生するようです。再帰的にチェックするファイルのリストに追加しないようにするか、少なくとも検査するファイルのリストに追加した場合はスキップするようにしました。

現状では、私のコードは正しくありませんが、これはむしろ論理的な誤謬である可能性が非常に高く、Java がこのファイルを読み取ることができるとどのように考えているかについての説明をいただければ幸いです。

private static List<String> exefiles = new ArrayList<String>();
public void findExe(File rootDir) throws SecurityException, IOException{
    List<File> files = new ArrayList<File>(Arrays.asList(rootDir.listFiles()));
    List<File> directories = new ArrayList<File>();
    Iterator<File> iterator = files.iterator();
    if(files.size() > 0){
        while(iterator.hasNext()){
            File currentFile = iterator.next();
            if(currentFile.getName().endsWith(".exe")){
                exefiles.add(currentFile.getAbsolutePath());
            }else if(currentFile.isDirectory()){
                if(currentFile.canRead()){
                    System.out.println("We can read " + currentFile.getAbsolutePath());
                    if(currentFile.listFiles().length > 0){
                        System.out.println(currentFile.getAbsolutePath() + " has a length greater than 0");
                        directories.add(currentFile);
                    }else{System.out.println(currentFile.getAbsolutePath() + " does not have any files in it");}
                }else{
                    System.out.println("Could not add " + currentFile.getAbsolutePath() + " to directories because it could not be read");
                }
            }else;
        }
    }

Windows でファイルのプロパティを開くと、システム グループと管理者グループにはフル コントロールがありますが、ユーザー グループには「特別なアクセス許可」しかありません。

Java 7 が java.nio.file パッケージを介して属性を処理する簡単な方法を提供していることは知っていますが、このオプションは私のニーズには適していません。

4

1 に答える 1

2

listFiles は、ディレクトリを渡さない場合、またはジャンクション ポイントなど、適切に処理できないものを渡した場合に null を返します。他のパッケージを使用すると、接合点を見ているかどうかを確認できる場合がありますが、基本的なファイル API ではこれを行うことができません。そうは言っても、代わりにnullityの簡単なチェックを行うことができるので、変更してください

}else if(currentFile.isDirectory()){

}else if(currentFile.isDirectory() && currentFile.listFiles()!=null){
于 2013-08-25T02:01:17.213 に答える