Cerrar un Scanner en Java

Rupam Yadav 12 octubre 2023
  1. Cerrar un Scanner en Java después de imprimir la entrada estándar del usuario
  2. Cerrar un Scanner en Java después de imprimir una cadena especificada que tiene nuevos caracteres de línea en medio
  3. Usar el método close() para cerrar el Scanner en Java después de leer el contenido de un archivo
Cerrar un Scanner en Java

En este tutorial, aprenderemos cómo cerrar un Scanner en Java, y cuándo debemos usarlo. La clase Scanner tiene un método close() que está especialmente disponible para cerrar el Scanner abierto. Incluso si no llamamos al método close() explícitamente, la interfaz Closeable será invocada, cerrando el flujo. Es una buena práctica cerrar un Scanner explícitamente.

Abajo están los ejemplos que muestran cómo y cuándo podemos usar el método Scanner.close().

Cerrar un Scanner en Java después de imprimir la entrada estándar del usuario

En el código de abajo, hemos creado un objeto Scanner in que toma la entrada estándar System.in del usuario en el constructor. El método nextLine() devuelve la entrada que se saltó. Lee toda la línea de entrada hasta el final de la línea, incluyendo los espacios y los separadores de línea.

La entrada se imprime, y luego cerramos el Scanner llamando al método close() en el objeto Scanner in. Después de cerrar el Scanner, si queremos usar in como estamos haciendo abajo con myString2, lanzará una excepción porque el flujo o Scanner se ha cerrado.

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)

Cerrar un Scanner en Java después de imprimir una cadena especificada que tiene nuevos caracteres de línea en medio

En este ejemplo, separaremos la cadena s en diferentes líneas usando \n y nextLine(). \n se utiliza para indicar una nueva línea, y como el Scanner de la línea siguiente nota una nueva línea, va a una nueva línea y luego la imprime. Por lo tanto, la salida tiene los tres sujetos en s en diferentes líneas.

Esta es una de las situaciones en las que podríamos llamar al método close() ya que no queremos que el scanner escanee más líneas nuevas.

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 

Usar el método close() para cerrar el Scanner en Java después de leer el contenido de un archivo

Se recomienda siempre cerrar el Scanner cuando estamos leyendo un archivo. Asegura que no se abra ningún flujo de entrada o salida, que no esté en uso. El siguiente ejemplo muestra cómo podemos leer una cadena del archivo y luego cerrar el Scanner una vez que se ha hecho la operación.

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

Artículo relacionado - Java Scanner