Cerrar un Scanner en Java
-
Cerrar un
Scanner
en Java después de imprimir la entrada estándar del usuario -
Cerrar un
Scanner
en Java después de imprimir una cadena especificada que tiene nuevos caracteres de línea en medio -
Usar el método
close()
para cerrar elScanner
en Java después de leer el contenido de un archivo
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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn