Java Language Lecture des entrées utilisateur depuis la console


Exemple

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

Les importations suivantes sont nécessaires pour ce code:

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

Utilisation du 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 + "!");

L'importation suivante est nécessaire pour cet exemple:

import java.util.Scanner;

Pour lire plusieurs lignes, scanner.nextLine() plusieurs fois scanner.nextLine() :

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 + "!");

Il existe deux méthodes pour obtenir des Strings , next() et nextLine() . next() renvoie le texte jusqu'au premier espace (également appelé "jeton"), et nextLine() renvoie tout le texte nextLine() par l'utilisateur jusqu'à ce que vous nextLine() sur enter.

Scanner fournit également des méthodes utilitaires pour lire des types de données autres que String . Ceux-ci inclus:

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

Si vous préfixez l'une de ces méthodes avec has (comme dans hasNextLine() , hasNextInt() ) renvoie true si le type de requête est plus hasNextInt() dans le flux. Remarque: Ces méthodes planteront le programme si l'entrée n'est pas du type demandé (par exemple, en tapant "a" pour nextInt() ). Vous pouvez utiliser un try {} catch() {} pour éviter cela (voir: Exceptions )

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

En utilisant 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();

Avantages :

  • Les méthodes de lecture sont synchronisées
  • La syntaxe de la chaîne de format peut être utilisée

Remarque : Cela ne fonctionnera que si le programme est exécuté à partir d'une ligne de commande réelle sans rediriger les flux d'entrée et de sortie standard. Il ne fonctionne pas lorsque le programme est exécuté à partir de certains IDE, tels que Eclipse. Pour le code qui fonctionne dans les IDE et avec la redirection de flux, voir les autres exemples.