ファイルの一覧(27000個)があります。目的は、ディレクトリ構造(サブディレクトリの複数のレベルを持つ)でこれらのファイルのそれぞれを検索し、不足しているファイルを印刷することです。私は、ファイルの存在を検索するための再帰関数を持つコードを持っています。コードは動作しているようですが、検索するファイルの数が非常に多い場合、この特定のシナリオでは非常に遅いです。このコードのパフォーマンスを向上させる方法はありますか?サブディレクトリのあるディレクトリ内のファイルの一覧を高速で検索する
コードスニペットは以下の通りです:すでにコメントで述べた
public static boolean walk(String path, String fileName) throws Exception {
File root = new File(path);
File[] list = root.listFiles();
if (list == null)
return false;
for (File f : list) {
if (f.isDirectory()) {
walk(f.getAbsolutePath(), fileName);
} else {
if (f.getAbsoluteFile().getName().equalsIgnoreCase(fileName)) {
presentFiles.add(f.getAbsoluteFile().getName());
throw new Exception("hi");
}
}
}
return false;
}
public static void main(String[] args) {
int i = 0;
for (String fileName : attrSet) {//attrSet is HashSet of all the files which are being searched.
try{
boolean isFileFound = walk(source, fileName);
}
catch(Exception e) {
System.out.println(e.getMessage() + i++);
}
}
attrSet.removeAll(presentFiles); //presentFiles is HashSet of all files present in the directory
for (String fileNm : attrSet) {
System.out.println("FileName : " + fileNm);
}
}
'各ファイル名に対して(再帰的)'から '再帰的{ファイル名ごとに}'に変更してみてください。 –
また例外を取り除いて戻り値を使用してください。 – Andreas