У меня есть следующий код:
public void searchStringInFile(String directory, String word)
{
if (word != null && directory != null)
{
File filePath = new File(directory);
Queue<File> queue = new LinkedList<>();
queue.add(filePath);
while (!queue.isEmpty())
{
File currentFile = queue.poll();
File[] listOfDirectories = currentFile.listFiles();
if (listOfDirectories != null)
{
for (File file : listOfDirectories)
{
if (file.isDirectory())
{
queue.add(file);
}
else
{
Thread thread = new Thread(new Runnable()
{
@Override
public void run()
{
readText(file, word);
}
});
thread.start();
}
}
}
}
}
}
private void readText(File file, String word)
{
Scanner scan = null;
try
{
scan = new Scanner(file);
String line;
int lineNumber = 0;
while (scan.hasNextLine())
{
line = scan.nextLine();
lineNumber++;
if (line.contains(word))
{
System.out.println("Line: " + lineNumber + " contains the word: " + word + " at file: " + file.getAbsolutePath());
}
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
finally
{
close(scan);
}
Он находит String(word)
во всех файлах в каталогах и подкаталогах.Я хочу сделать его многопоточным приложением - когда он входит в каталог (или обнаруживается), он должен запустить new Thread
и начать поиск в файлах, и я не знаю, как это сделать на самом деле.Я делаю это, как в приведенном выше коде, чтобы запускать new Thread
каждый раз, когда он открывает файл, но это должно быть, когда он входит в каталог.