Chiudi uno scanner in Java

Rupam Yadav 12 ottobre 2023
  1. Chiudere uno Scanner in Java dopo aver stampato l’input standard dall’utente
  2. Chiudere uno Scanner in Java dopo aver stampato una stringa specificata che ha nuovi caratteri di riga in mezzo
  3. Usa il metodo close() per chiudere lo Scanner in Java dopo aver letto il contenuto di un file
Chiudi uno scanner in Java

In questo tutorial impareremo come chiudere uno scanner in Java e quando dovremmo usarlo. La classe Scanner ha un metodo close() particolarmente disponibile per chiudere lo scanner aperto. Anche se non chiamiamo esplicitamente il metodo close(), verrà invocata l’interfaccia Closeable, chiudendo lo stream. È buona norma chiudere uno scanner in modo esplicito.

Di seguito sono riportati gli esempi che mostrano come e quando possiamo utilizzare il metodo Scanner.close().

Chiudere uno Scanner in Java dopo aver stampato l’input standard dall’utente

Nel codice seguente, abbiamo creato un oggetto Scanner in che accetta lo standard input System.in dall’utente nel costruttore. Il metodo nextLine() restituisce l’input che è stato saltato. Legge l’intera riga di input fino alla fine della riga, inclusi spazi e separatori di riga.

L’input viene stampato, quindi chiudiamo lo Scanner chiamando il metodo close() sull’oggetto Scanner in. Dopo che lo Scanner è chiuso, se vogliamo usare in come stiamo facendo di seguito con myString2, verrà lanciata un’eccezione perché lo stream o Scanner è stato chiuso.

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);
  }
}

Produzione:

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)

Chiudere uno Scanner in Java dopo aver stampato una stringa specificata che ha nuovi caratteri di riga in mezzo

In questo esempio, separeremo la stringa s in righe differenti usando \n e nextLine(). \n è usato per indicare una nuova riga, e poiché scanner.nextLine() nota una nuova riga, va su una nuova riga e poi la stampa. Quindi l’output ha tutti e tre i soggetti in s in righe diverse.

Questa è una delle situazioni in cui potremmo voler chiamare il metodo close() poiché non vogliamo che lo scanner esegua la scansione di ulteriori nuove righe.

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());
    }
  }
}

Produzione:

 English 
 Maths 
 Science 

Usa il metodo close() per chiudere lo Scanner in Java dopo aver letto il contenuto di un file

Si consiglia di chiudere sempre lo Scanner durante la lettura di un file. Assicura che non venga aperto alcun flusso di input o output, che non è in uso. L’esempio seguente mostra come leggere una stringa dal file e poi chiudere lo Scanner una volta terminata l’operazione.

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());
    }
  }
}

Produzione:

Hello, You are in a text file.
Autore: Rupam Yadav
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

Articolo correlato - Java Scanner