Segue minha implementação da aula.
Classe Principal:
package br.com.alura.threads.busca_textual;
import java.util.Scanner;
public class Principal {
public static void main(String[] args) throws InterruptedException {
try {
// Thread não tem uma ordem de execução!
Scanner scanner = new Scanner(System.in);
String nomeArquivo = "";
System.out.print("Digite o nome a ser procurado: ");
String nomeBuscado = scanner.next();
System.out.println("Digite a op\u00E7\u00E3o de arquivo a ser procurado: ");
System.out.println("[1] - assinaturas1.txt");
System.out.println("[2] - assinaturas2.txt");
System.out.println("[3] - autores.txt");
Integer opcaoEscolhida = scanner.nextInt();
switch (opcaoEscolhida) {
case 1:
nomeArquivo = "src/br/com/alura/threads/busca_textual/assinaturas1.txt";
chamaThread(nomeBuscado, nomeArquivo);
break;
case 2:
nomeArquivo = "src/br/com/alura/threads/busca_textual/assinaturas2.txt";
chamaThread(nomeBuscado, nomeArquivo);
break;
case 3:
nomeArquivo = "src/br/com/alura/threads/busca_textual/autores.txt";
chamaThread(nomeBuscado, nomeArquivo);
break;
default:
scanner.close();
throw new IllegalArgumentException("N\u00E3o existe essa op\u00E7\u00E3o! Tente novamente!");
}
scanner.close();
} catch (IllegalArgumentException e) {
System.err.println(e.getMessage());
}
}
public static void chamaThread(String nomeBuscado, String nomeArquivo) throws InterruptedException {
Runnable nomeAProcurar = new BuscaNomes(nomeBuscado, nomeArquivo);
Thread thread = new Thread(nomeAProcurar, "Thread_" + nomeArquivo);
Thread.sleep(250);
thread.start();
}
}
Classe de busca de nomes:
package br.com.alura.threads.busca_textual;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class BuscaNomes implements Runnable {
private String nomeArquivo;
private String nomeBuscado;
public BuscaNomes(String nomeBuscado, String nomeArquivo) {
this.nomeBuscado = nomeBuscado;
this.nomeArquivo = nomeArquivo;
}
@Override
public void run() {
try {
Scanner scanner = new Scanner(new File(nomeArquivo));
Integer numLinha = 1;
while (scanner.hasNextLine()) {
String linha = scanner.nextLine();
if (linha.toLowerCase().contains(nomeBuscado.toLowerCase())) {
System.out.format("Encontrei o nome %s na linha %d no arquivo %s! Boa!", linha, numLinha,
nomeArquivo);
return;
}
numLinha += 1;
}
System.out.format("O nome %s n\u00E3o foi encontrado no arquivo %s! Que pena!", nomeBuscado, nomeArquivo);
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
}
}
Alguma sugestão?
Obrigado!