首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 控制台輸入三大方式詳解:System.in、Scanner、Console

     編輯:Java 相關知識

從 JDK 1.4 到 1.6 的控制台輸入演進

Java 提供三種主流方式從標準輸入讀取資料,各有適用版本與特色。

方式一:BufferedReader + System.in (JDK 1.4+)

最經典、相容性最好,需手動處理編碼與緩衝。

import java.io.*;

public class ConsoleInputDemo1 {
    public static void main(String[] args) {
        String input = readLine("請輸入字串:");
        System.out.println("您輸入:" + input);
    }
    
    private static String readLine(String prompt) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.print(prompt);
        try {
            return br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

方式二:Scanner (JDK 1.5+)

功能豐富,支援基本型別解析、正則分隔、檔案掃描。

import java.util.Scanner;

public class ConsoleInputDemo2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("請輸入整數:");
        int num = scanner.nextInt();        // 直接解析 int
        System.out.print("請輸入字串:");
        String str = scanner.next();        // 以空白分隔
        System.out.println("數字:" + num + ",字串:" + str);
        
        // 進階:掃描檔案並求和
        // Scanner fileScanner = new Scanner(new File("num.txt"));
        // while (fileScanner.hasNextDouble()) sum += fileScanner.nextDouble();
    }
}

方式三:Console (JDK 1.6+)

專為互動式終端機設計,支援**密碼無回顯**,API 更簡潔。

import java.io.Console;

public class ConsoleInputDemo3 {
    public static void main(String[] args) {
        Console console = System.console();
        if (console == null) {
            System.err.println("無法取得 Console (可能在 IDE 執行),請在終端機運行。");
            return;
        }
        
        String username = console.readLine("Username: ");
        char[] password = console.readPassword("Password: "); // 無回顯!
        
        if ("admin".equals(username) && "123456".equals(new String(password))) {
            console.printf("歡迎 %s 登入系統%n", username);
        } else {
            console.printf("帳號或密碼錯誤%n");
        }
        
        // 安全性:用畢立即清空密碼陣列
        java.util.Arrays.fill(password, ' ');
    }
}

三大方式對比表

特性BufferedReaderScannerConsole
最低 JDK1.41.51.6
密碼無回顯需自行實作不支援原生支援 readPassword()
型別解析手動轉換內建 nextInt() 等手動轉換
正則分隔不支援支援 useDelimiter()不支援
檔案掃描需包裝 FileReader直接 new Scanner(file)不支援
IDE 相容性完美完美通常為 null (輸出重導向)
編碼控制InputStreamReader 指定Scanner 建構子指定預設系統編碼

實務選型建議

  • 一般 CLI 工具:Scanner 功能最完整、程式碼最簡潔。
  • 需密碼輸入/安全性要求高:必須使用 Console.readPassword(),並立即清空 char[]。
  • 舊版本相容/簡單讀行:BufferedReader。
  • IDE 開發測試:避免用 Console (回傳 null),改用 Scanner 或 BufferedReader。

Scanner 進階技巧:有狀態解析

Scanner sc = new Scanner("2 2.2 3.3 done");
double sum = 0;
while (sc.hasNext()) {
    if (sc.hasNextDouble()) {
        sum += sc.nextDouble();
    } else {
        String token = sc.next();
        if ("done".equals(token)) break;
        else throw new RuntimeException("格式錯誤: " + token);
    }
}
System.out.println("Sum = " + sum); // 7.5
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved