私が行っているプロジェクトでは、ユーザー入力によって指定されたファイルを検索する Java プログラムを作成しました。
コードは、ユーザーが指定したベース ディレクトリ (例: C:) で検索を開始します。このディレクトリ内のすべてのファイルをループして、ファイル名がユーザーが指定した検索用語と一致するかどうかを確認します。一致する場合は、ファイルの絶対パスが文字列に追加されます。ファイルがディレクトリの場合、後で処理するためにリストに追加されます。
ベース フォルダの検索が終了すると、同じ方法でリストの最初のディレクトリを検索/削除し (見つかったディレクトリをもう一度リストに追加します)、検索するディレクトリがなくなるまで続けます。次に、見つかったファイルをユーザーに表示します。
私の質問; ファイルを検索するより良い方法はありますか? ディレクトリをリストに追加するのではなく、すぐにディレクトリを検索するのでしょうか? どんなアドバイスも素晴らしいでしょう、事前に感謝します! これが私のコードです。
public String SearchDir(File directory){
this.directory = directory;
do{
File[] files = this.directory.listFiles();
if(files != null){
for(int i = 0; i < files.length; i++){
// The current file.
File currentFile = files[i];
// The files name without extension and path
// ie C:\Documents and Settings\myfile.file = myfile
String fileName = this .removeExtension(this.removePath(currentFile.getName()));
// Don't search hidden files
if(currentFile.isHidden()){
continue;
}
System.out.println(currentFile.getAbsolutePath());
// Check if the user wanted a narrow search
if(this.narrow){
// Narrow search = check if the file STARTS with the string given.
if(fileName.toLowerCase().startsWith(this.fileName.toLowerCase())){
this.found += currentFile.getAbsolutePath() + '\n';
this.foundXTimes++;
}
}
else{
// Non-Narrow search = check for the given string ANYWHERE in the file name.
if(fileName.toLowerCase().contains(this.fileName.toLowerCase())){
this.found += currentFile.getAbsolutePath() + '\n';
this.foundXTimes++;
}
}
// If the file is a directory add it to the buffer to be searched later.
if(currentFile.isDirectory()){
this.directoriesToSearch.add(currentFile);
}
}
if(!this.directoriesToSearch.isEmpty()){
this.directory = this.directoriesToSearch.remove(0);
}
}
} while(!this.directoriesToSearch.isEmpty());
if(!this.found.equals(""))
return this.found;
else
return "x";
}