Java Language Leggere l'input dell'utente dalla console


Esempio

Utilizzando BufferedReader :

System.out.println("Please type your name and press Enter.");

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
    String name = reader.readLine();
    System.out.println("Hello, " + name + "!");
} catch(IOException e) {
    System.out.println("An error occurred: " + e.getMessage());
}

Le seguenti importazioni sono necessarie per questo codice:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

Utilizzo dello Scanner :

Java SE 5
System.out.println("Please type your name and press Enter");

Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();

System.out.println("Hello, " + name + "!");

La seguente importazione è necessaria per questo esempio:

import java.util.Scanner;

Per leggere più di una riga, richiamare scanner.nextLine() ripetutamente:

System.out.println("Please enter your first and your last name, on separate lines.");
    
Scanner scanner = new Scanner(System.in);
String firstName = scanner.nextLine();
String lastName = scanner.nextLine();
    
System.out.println("Hello, " + firstName + " " + lastName + "!");

Esistono due metodi per ottenere Strings , next() e nextLine() . next() restituisce il testo fino al primo spazio (noto anche come "token"), e nextLine() restituisce tutto il testo immesso dall'utente fino a quando non si preme enter.

Scanner fornisce anche metodi di utilità per la lettura di tipi di dati diversi da String . Questi includono:

scanner.nextByte();
scanner.nextShort();
scanner.nextInt();
scanner.nextLong();
scanner.nextFloat();
scanner.nextDouble();
scanner.nextBigInteger();
scanner.nextBigDecimal();

Prefixing di uno qualsiasi di questi metodi con has (come in hasNextLine() , hasNextInt() ) restituisce true se lo stream ha più del tipo di richiesta. Nota: questi metodi causeranno il crash del programma se l'input non è del tipo richiesto (ad esempio, digitando "a" per nextInt() ). Puoi usare try {} catch() {} per impedirlo (vedi: Eccezioni )

Scanner scanner = new Scanner(System.in); //Create the scanner
scanner.useLocale(Locale.US); //Set number format excepted
System.out.println("Please input a float, decimal separator is .");
if (scanner.hasNextFloat()){ //Check if it is a float
    float fValue = scanner.nextFloat(); //retrive the value directly as float
    System.out.println(fValue + " is a float");
}else{
    String sValue = scanner.next(); //We can not retrive as float
    System.out.println(sValue + " is not a float");
}

Utilizzando System.console :

Java SE 6
String name = System.console().readLine("Please type your name and press Enter%n");

System.out.printf("Hello, %s!", name);

//To read passwords (without echoing as in unix terminal)
char[] password = System.console().readPassword();

Vantaggi :

  • I metodi di lettura sono sincronizzati
  • È possibile utilizzare la sintassi della stringa del formato

Nota : funziona solo se il programma viene eseguito da una riga di comando reale senza reindirizzare gli stream di input e output standard. Non funziona quando il programma viene eseguito da determinati IDE, come ad esempio Eclipse. Per il codice che funziona all'interno degli IDE e con il reindirizzamento del flusso, vedere gli altri esempi.