3 manieren voor het lezen van invoer van de gebruiker vanuit de console in Java
In dit artikel, bespreken we drie verschillende manieren voor het lezen van invoer van de gebruiker in de commandoregel omgeving (ook bekend als de “console”). Elke manier is vrij eenvoudig te gebruiken en heeft ook zijn eigen voor- en nadelen.
Invoer van de gebruiker lezen met de klasse BufferedReader
Door de System.in (standaard input stream) te verpakken in een InputStreamReader die verpakt is in een BufferedReader, kunnen we invoer van de gebruiker in de commandoregel lezen. Hier is een voorbeeld:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));System.out.print("Enter your name: ");String name = reader.readLine();System.out.println("Your name is: " + name);
In het bovenstaande voorbeeld leest de readLine() methode een regel tekst van de opdrachtregel.Advantages: De invoer wordt gebufferd voor efficiënt lezen.Nadelen: De inpakcode is moeilijk te onthouden.
Invoer van de gebruiker lezen met de klasse Scanner
Het belangrijkste doel van de klasse Scanner (beschikbaar sinds Java 1.5) is het ontleden van primitieve types en strings met behulp van reguliere expressies, maar de klasse kan ook worden gebruikt om invoer van de gebruiker in de opdrachtregel te lezen. Hier is een voorbeeld:
Scanner scanner = new Scanner(System.in);System.out.print("Enter your nationality: ");String nationality = scanner.nextLine();System.out.print("Enter your age: ");int age = scanner.nextInt();
Voordelen:
- Gemakkelijke methoden voor het parsen van primitieven (nextInt(), nextFloat(), …) uit de getekeniseerde invoer.
- Reguliere expressies kunnen worden gebruikt om tokens te vinden.
Nadelen:
- De leesmethoden zijn niet gesynchroniseerd.
Lees meer: Java Scanner Tutorial en Code Voorbeelden
Invoer van gebruiker lezen met de Console klasse
De Console klasse werd geïntroduceerd in Java 1.6, en het is de favoriete manier geworden om invoer van de gebruiker te lezen vanaf de commandoregel. Bovendien kan ze gebruikt worden voor het lezen van paswoord-achtige invoer zonder echo van de door de gebruiker ingevoerde karakters; de format string syntax kan ook gebruikt worden (zoals System.out.printf()). Hier is een voorbeeld codefragment:
Console console = System.console();if (console == null) {System.out.println("No console: non-interactive mode!");System.exit(0);}System.out.print("Enter your username: ");String username = console.readLine();System.out.print("Enter your password: ");char password = console.readPassword();String passport = console.readLine("Enter your %d (th) passport number: ", 2);
Voordelen:
- Wachtwoord inlezen zonder echo van de ingevoerde tekens.
- Inleesmethoden zijn gesynchroniseerd.
- Format string syntaxis kan worden gebruikt.
Nadelen:
- Werkt niet in een niet-interactieve omgeving (zoals in een IDE).
Lees meer: Java Console Input Output Examples
Java Reading User’s Input Example Program
Voor uw gemak en referentie-doeleinden, combineren we de bovenstaande code snippet in een demo programma waarvan de broncode er als volgt uitziet:
package net.codejava.io;import java.io.*;import java.util.*;public class UserInputConsoleDemo {public static void main(String args) {// using InputStreamReadertry {BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));System.out.print("Enter your name: ");String name = reader.readLine();System.out.println("Your name is: " + name);} catch (IOException ioe) {ioe.printStackTrace();}// using ScannerScanner scanner = new Scanner(System.in);System.out.print("Enter your nationality: ");String nationality = scanner.nextLine();System.out.println("Your nationality is: " + nationality);// using ConsoleConsole console = System.console();if (console == null) {System.out.println("No console: not in interactive mode!");System.exit(0);}System.out.print("Enter your username: ");String username = console.readLine();System.out.print("Enter your password: ");char password = console.readPassword();System.out.println("Thank you!");System.out.println("Your username is: " + username);System.out.println("Your password is: " + String.valueOf(password));// using Console with formatted promptString job = console.readLine("Enter your job: ");String passport = console.readLine("Enter your %d (th) passport number: ", 2);System.out.println("Your job is: " + job);System.out.println("Your passport number is: " + passport);}}
Bekijk de video:
- Console class Javadoc
- I/O from the Command Line – The Java Tutorials
- Scanner class Javadoc
- BufferedReader class Javadoc
Gerelateerde Tutorials:
- Java Console Input Output Examples
- Java Scanner Tutorial and Code Examples
Overige Java File IO Tutorials:
- Hoe tekstbestand lezen en schrijven in Java
- Hoe binaire bestanden lezen en schrijven in Java
- Java IO – Algemene Bestands- en Directorybewerkingen Voorbeelden
- Java Serialization Basis Voorbeeld
- Uitleg Java Externalization met Voorbeelden
- Hoe comprimeer je bestanden in ZIP formaat in Java
- Hoe pak je een ZIP bestand uit in Java
Over de Auteur:
Nam Ha Minh is gecertificeerd Java programmeur (SCJP en SCWCD). Hij begon met programmeren in Java in de tijd van Java 1.4 en is sindsdien verliefd geworden op Java. Sluit vriendschap met hem op Facebook en bekijk zijn Java-video’s op YouTube.