Fechar um Scanner em Java

Rupam Yadav 12 outubro 2023
  1. Fechar um Scanner em Java após a impressão da entrada padrão do utilizador
  2. Fechar um Scanner em Java após a impressão de uma string especificada que tenha novos caracteres de linha no meio
  3. Use o método close() para fechar o Scanner em Java após ler o conteúdo de um arquivo
Fechar um Scanner em Java

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 Yadav avatar Rupam Yadav avatar

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

Artigo relacionado - Java Scanner