Fechar um Scanner em Java
-
Fechar um
Scanner
em Java após a impressão da entrada padrão do utilizador -
Fechar um
Scanner
em Java após a impressão de uma string especificada que tenha novos caracteres de linha no meio -
Use o método
close()
para fechar oScanner
em Java após ler o conteúdo de um arquivo
Neste tutorial, aprenderemos como fechar um scanner em Java, e quando o devemos utilizar. A classe Scanner
tem um método close()
que está especialmente disponível para fechar o scanner aberto. Mesmo que não chamemos explicitamente o método close()
, a interface Closeable
será invocada, fechando o fluxo. É uma boa prática fechar um scanner de forma explícita.
Abaixo estão os exemplos que mostram como e quando podemos utilizar o método Scanner.close()
.
Fechar um Scanner
em Java após a impressão da entrada padrão do utilizador
No código abaixo, criámos um objecto Scanner
in
que recebe a entrada padrão System.in
do utilizador no construtor. O método nextLine()
devolve a entrada que foi saltada. Ele lê toda a linha de entrada até ao fim da linha, incluindo espaços e separadores de linha.
O input é impresso, e depois fechamos o Scanner
chamando o método close()
no objecto Scanner
in
. Após o Scanner
estar fechado, se quisermos utilizar o in
como estamos a fazer abaixo com o myString2
, será lançada uma excepção porque o fluxo ou o Scanner
foi fechado.
import java.util.Scanner;
public class CloseScanner {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Enter a String: ");
String mystring = in.nextLine();
System.out.println("The String you entered is: " + mystring);
in.close();
String myString2 = in.nextLine();
System.out.println(myString2);
}
}
Resultado:
Enter a String: the cat is white
The String you entered is: the cat is white
Exception in thread "main" java.lang.IllegalStateException: Scanner closed
at java.base/java.util.Scanner.ensureOpen(Scanner.java:1150)
at java.base/java.util.Scanner.findWithinHorizon(Scanner.java:1781)
at java.base/java.util.Scanner.nextLine(Scanner.java:1649)
at com.company.Main.main(Main.java:20)
Fechar um Scanner
em Java após a impressão de uma string especificada que tenha novos caracteres de linha no meio
Neste exemplo, vamos separar as s
em diferentes linhas utilizando \n
e nextLine()
. \n
é utilizada para indicar uma nova linha, e como o scanner.nextLine()
observa uma nova linha, vai para uma nova linha e depois imprime-a. Assim, a saída tem todos os três temas em s
em linhas diferentes.
Esta é uma das situações em que podemos querer chamar o método close()
como não queremos que o scanner
digitalize mais nenhuma linha nova.
import java.util.Scanner;
public class CloseScanner {
public static void main(String[] args) {
try {
String s = " English \n Maths \n Science ";
Scanner scanner = new Scanner(s);
System.out.println(scanner.nextLine());
System.out.println(scanner.nextLine());
System.out.println(scanner.nextLine());
scanner.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
Resultado:
English
Maths
Science
Use o método close()
para fechar o Scanner
em Java após ler o conteúdo de um arquivo
Recomenda-se fechar sempre o Scanner
quando estivermos a ler um ficheiro. Assegura que nenhum fluxo de entrada ou saída é aberto, o qual não está a ser utilizado. O exemplo seguinte mostra como podemos ler uma string do ficheiro e depois fechar o scanner
uma vez terminada a operação.
import java.io.File;
import java.util.Scanner;
public class CloseScanner {
public static void main(String[] args) {
try {
File file = new File("/Users/john/Documents/Example.txt");
Scanner scanner = new Scanner(file);
StringBuffer sb = new StringBuffer();
while (scanner.hasNext()) {
sb.append(" " + scanner.nextLine());
}
System.out.println(sb);
scanner.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
Resultado:
Hello, You are in a text file.
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn