3 sposoby na odczytywanie danych wejściowych użytkownika z konsoli w Javie
W tym artykule, omawiamy trzy różne sposoby odczytywania danych wejściowych od użytkownika w środowisku wiersza poleceń (znanym również jako „konsola”). Każdy sposób jest dość łatwy w użyciu, a także ma swoje własne zalety i wady.
Odczytywanie danych wejściowych użytkownika przy użyciu klasy BufferedReader
Przez zawinięcie System.in (standardowego strumienia wejściowego) w InputStreamReader, który jest zawinięty w BufferedReader, możemy odczytywać dane wejściowe od użytkownika w linii poleceń. Oto przykład:
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);
W powyższym przykładzie, metoda readLine() odczytuje linię tekstu z wiersza poleceń.Advantages: Dane wejściowe są buforowane dla sprawnego odczytu.Wady: Kod zawijający jest trudny do zapamiętania.
Odczytywanie danych wejściowych użytkownika przy użyciu klasy Scanner
Głównym przeznaczeniem klasy Scanner (dostępnej od wersji Java 1.5) jest parsowanie typów prymitywnych i łańcuchów przy użyciu wyrażeń regularnych, jednak może być ona również użyta do odczytywania danych wejściowych od użytkownika w linii poleceń. Oto przykład:
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();
Zalety:
- Wygodne metody do parsowania prymitywów (nextInt(), nextFloat(), …) z tokenizowanych danych wejściowych.
- Wyrażenia regularne mogą być użyte do wyszukiwania tokenów.
Wady:
- Metody odczytu nie są zsynchronizowane.
Dowiedz się więcej: Java Scanner Tutorial and Code Examples
Reading User’s Input using Console class
Klasa Console została wprowadzona w Javie 1.6, i stała się preferowanym sposobem na odczytywanie danych wejściowych użytkownika z linii poleceń. Dodatkowo, może być używana do odczytywania danych wejściowych typu hasło bez echa znaków wprowadzonych przez użytkownika; składnia łańcucha formatu może być również używana (jak System.out.printf()). Oto przykładowy wycinek kodu:
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);
Zalety:
- Odczytywanie hasła bez echa wprowadzonych znaków.
- Metody odczytu są zsynchronizowane.
- Możliwość użycia składni ciągu formatów.
Wady:
- Nie działa w środowisku nieinteraktywnym (np. w IDE).
Dowiedz się więcej: Java Console Input Output Examples
Java Czytanie wejścia użytkownika Przykładowy program
Dla Twojej wygody i celów referencyjnych, łączymy powyższy wycinek kodu w program demonstracyjny, którego kod źródłowy wygląda tak:
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);}}
Obejrzyj wideo:
- Console class Javadoc
- I/O from the Command Line – The Java Tutorials
- Scanner class Javadoc
- BufferedReader class Javadoc
Relelated Tutorials:
- Przykłady wejścia i wyjścia konsoli Java
- Skaner Java – samouczek i przykłady kodu
Inne tutoriale Java File IO:
- Jak czytać i zapisywać pliki tekstowe w Javie
- Jak czytać i zapisywać pliki binarne w Javie
- Java IO – Common File Operations Examples
- Java IO – Przykłady operacji na plikach i katalogach. Common File and Directory Operations Examples
- Java Serialization Basic Example
- Understanding Java Externalization with Examples
- How to compress files in ZIP format in Java
- How to extract ZIP file in Java
About the Author:
Nam Ha Minh jest certyfikowanym programistą Java (SCJP i SCWCD). Zaczął programować w Javie w czasach Javy 1.4 i od tego czasu zakochał się w Javie. Zaprzyjaźnij się z nim na Facebooku i oglądaj jego filmy o Javie na YouTube.