首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 控制台輸入不顯示綠字:改用檔案讀取或 Scanner 替代 System.in

     編輯:程式設計疑難解答

控制台執行 Java 程式時,使用者輸入的字元會即時回顯在終端機 (綠色/白色視終端機設定而定)。若不想看到輸入回顯,有兩種常見做法:

方法 1:從檔案讀取 (批次/測試適用)

// 輸入資料存放在 data.txt
Scanner scanner = new Scanner(new File("data.txt"));
while (scanner.hasNext()) {
    String input = scanner.nextLine();
    // 處理 input
}
scanner.close();
  • 完全無互動輸出,適合自動化測試、批次處理。
  • 需準備好輸入檔案。

方法 2:使用 Console 類別關閉回顯 (JDK 6+,需真實終端機)

Console console = System.console();
if (console != null) {
    char[] password = console.readPassword("輸入密碼: "); // 不回顯
    // 處理 password
} else {
    // IDE 內建終端機通常回傳 null,需改用 Scanner
    Scanner sc = new Scanner(System.in);
    String input = sc.nextLine(); // 會回顯
}
  • readPassword 回傳 char[] 而非 String,較安全 (用畢可手動清零)。
  • 在 Eclipse/IntelliJ 內建終端機 System.console() == null,此法失效。

方法 3:GUI 對話框 (Swing/JavaFX)

String input = JOptionPane.showInputDialog("請輸入:"); // 彈出視窗,無控制台輸出

針對提問情境的建議

提問者提到「綠色部分是輸入的」、「想把綠色去掉不讓它顯示」,且畫面顯示為 IDE 控制台。最簡單做法:**改用檔案輸入或單元測試**,完全避免控制台互動。若必須在控制台互動且不想回顯,僅能在真實終端機 (cmd, bash) 搭配 Console.readPassword 達成。

補充:Bean 與資料庫欄位不一致的處理

提問另一段提到「A 欄位不在資料庫,B 在資料庫,將 A 賦值給 B 後頁面報識別符無效」。這通常是 **ORM 映射錯誤**:

  • Entity 類別有 @Column(name="B") 欄位 b,但無 a 欄位。
  • 頁面 (JSP/Thymeleaf) 嘗試存取 ${entity.a} 導致 EL 找不到屬性。
  • 解決:在 Entity 增加 @Transient private String a; (不映射資料庫),並提供 getter/setter,或在 Controller 轉換為 DTO/VO 再傳給視圖。

區分「控制台輸入回顯」與「ORM 欄位映射」兩個不同層面的問題,對症下藥。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved