3

ディレクトリ内のすべてのファイルとそのすべてのサブディレクトリ(一部を除く)を見つける必要があります。
現在、私はこの方法を使用しています:

public  static Collection<File> listFiles(File directory,FilenameFilter filter,boolean recurse){
    Vector<File> files = new Vector<File>();
    File[] entries = directory.listFiles();
    if(entries!=null){
        for (File entry : entries){
            if (filter == null || filter.accept(directory, entry.getName())){
                    files.add(entry);
            }

            if (recurse && entry.isDirectory()){
                    files.addAll(listFiles(entry, filter, recurse));
            }
        }
    }
    return files;
}

そしてそれをこのように使う:

        this.foundFiles=listFiles(new File(this.BaseDirectory), new FilenameFilter() {
            public boolean accept(File dir, String name) {
                boolean res=true;
                if(name.endsWith(".pdf")){
                    if(!dir.getPath().endsWith("done")){
                        if((workingFile!=null && (dir.getPath().equals(workingFile.getParent()) && name.equals(workingFile.getName())))){
                            res=false;
                        }else{
                            try {
                                ArrayList<String> AuthFolders = DB.getGroupAuthFoldersArray();
                                for(String folder:AuthFolders){
                                    if(dir.getPath().startsWith(BaseDirectory+File.separator+folder)){
                                        res=true;
                                        break;
                                    }else{
                                        res=false;
                                    }
                                }
                            } catch (SQLException ex) {
                                Logger.getLogger(scanner.class.getName()).log(Level.SEVERE, null, ex);
                                res=false;
                            } catch (InterruptedException ex) {
                                Logger.getLogger(scanner.class.getName()).log(Level.SEVERE, null, ex);
                                res=false;
                            }
                        }
                    }else{
                        res=false;
                    }
                }else{
                    res=false;
                }
                return res;
            }
        }, true);

しかし、これは遅すぎます!ディレクトリに約3000個のファイルがあり、このメソッドですべてを見つけるのに10〜15分(!!)かかります。

どうすればこれを速く行うことができますか?メソッドの
使用を考えています。org.apache.commons.io.FileUtils.listfilesより速い方法はありますか?

ありがとう

4

2 に答える 2

9

ストリーミングを使用するため、Files.walkFileTreeより高速な Java 7 で使用します。listFiles詳細については、チュートリアルを参照してください。

于 2012-05-02T10:12:09.797 に答える
1
} catch (SQLException ex) { 

これは、ディレクトリリストを作成することを目的としたクラスに属していません。

于 2012-05-02T10:43:42.820 に答える