Eu estava praticando o conteúdo de Listas e resolvi implementar um pouco do que eu aprendi no curso [https://cursos.alura.com.br/course/java-trabalhando-com-io](Java e java.io: Streams, Reader e Writers) também, assim ficou o código:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class TesteComListas {
public static void main(String[] args) throws Exception {
ArrayList<String> lista = new ArrayList<>();
Scanner arquivo = new Scanner(new FileInputStream(Digita("Entrada de Arquivo: ")), "UTF-8");
while (arquivo.hasNextLine()) {
String item = arquivo.nextLine();
lista.add(item);
}
Collections.sort(lista);
MostraPorLetra(lista);
}
public static String Digita(String mensagem) throws Exception {
System.out.print(mensagem);
BufferedReader buff = new BufferedReader(new InputStreamReader(System.in));
String entradaDoTeclado = buff.readLine();
buff.close();
return entradaDoTeclado;
}
public static void MostraPorLetra(List<String> lista) throws Exception {
System.out.println("Mostrando Itens pela letra.");
String letra = Digita("Letra: ");
for (int i = 0; i < lista.size(); i++) {
String item = lista.get(i);
if (item.charAt(0) == letra.charAt(0)) {
System.out.println(item);
}
}
}
}
Porém ao executar o código, dá uma exceção "IOException: Stream Closed" na chamada do método "MostraPorLetra()". Eu chamo o método "Digita()" lá no meu Scanner, e funciona, pois eu testei esse mesmo código sem chamar o "MostraPorLetra()", dá erro quando eu chamo o "Digita()" pela segunda vez dentro do "MostraPorLetra()". Eu queria saber o porque acontece e como eu resolvo isso...