Trong Java, có 3 cách để nhập dữ liệu từ bàn phím (đọc dữ liệu từ console):
- Dùng BufferedReader + InputStreamReader (Những phiên bản Java cũ)
- Dùng Scanner (JDK 1.5)
- System.console (JDK 1.6)
1. Nhập dữ liệu sử dụng BufferedReader + InputStreamReader
Đây là cách truyền thống được dùng từ thời JDK 1.4 trở về trước
package com.ngockhuong; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ReadConsole { public static void main(String[] args) { BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.print("Nhập nội dung: "); String input = br.readLine(); if ("q".equals(input)) { System.out.println("Thoát!"); System.exit(0); } System.out.println("Đã nhâp : " + input); System.out.println("-----------\n"); } } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
Kết quả
Nhập nội dung: lâm ngọc khương Đã nhâp : lâm ngọc khương ----------- Nhập nội dung: q Thoát!
2. Nhập dữ liệu sử dụng Scanner
Trong JDK 1.5, bạn có thể dùng java.util.Scanner
để nhập dữ liệu vào từ bàn phím. Scanner hỗ trợ các phương thức hay dùng như:
- nextInt(), nextLong() : nhập vào một số nguyên.
- nextFloat(), nextDouble() : nhập vào số thực.
- nextBoolean() : nhập vào true hoặc false.
- next() : nhập vào một chuỗi các ký tự không chứa khoảng trắng.
- nextLine() : nhập vào một chuỗi các ký tự (được phép có khoảng trắng).
- …
Tuy nhiên, việc dùng các phương thức nhập số rất dễ gặp tình trạng trôi lệnh. Trôi lệnh và cách khắc phục như thế nào? Bạn có thể xem ở đây: Xử lý trôi lệnh khi dùng Scanner trong Java
package com.ngockhuong; import java.util.Scanner; public class ReadConsole { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (true) { System.out.print("Nội dung: "); String input = scanner.nextLine(); if ("q".equals(input)) { System.out.println("Thoát!"); break; } System.out.println("Đã nhập: " + input); System.out.println("-----------\n"); } scanner.close(); } }
Kết quả
Nội dung: ngockhuong dot com Đã nhập: ngockhuong dot com ----------- Nội dung: nhập dữ liệu sử dụng Scanner Đã nhập: nhập dữ liệu sử dụng Scanner ----------- Nội dung: q Thoát!
3. Nhập dữ liệu sử dụng System.console
Trong JDK 1.6, bạn có thể sử dụng một cách đơn giản mà mạnh mẽ hơn. Đó là class java.io.Console
.
Class Console cung cấp các phương thức để nhập vào chuỗi và cả password (readPassword()
method). Nếu bạn develop một chương trình tương tác chủ yếu với console trên Linux, Windows thì java.io.Console là lựa chọn tốt nhất
package com.ngockhuong; public class ReadConsole { public static void main(String[] args) { while (true) { System.out.print("Vui lòng nhập: "); // phương thức console() trả về đối tượng thuộc lớp Console String input = System.console().readLine(); if ("q".equals(input)) { System.out.println("Thoát!"); System.exit(0); } System.out.println("Nội dung đã nhập: " + input); System.out.println("-----------\n"); } } }
Kết quả
[alert-warning]Note
Trong ví dụ sử dụng System.console()
, bạn không thể chạy chương trình trên các IDE như Eclipse mà chỉ có thể chạy trên Terminal (Linux), Command Prompt (Windows).
Cách chạy chương trình sử dụng System.console():
Nếu bạn dùng Eclipse, hãy nhấn Ctrl + F11 hoặc Run để chương trình build và chạy, bạn sẽ nhìn thấy lỗi. Tuy nhiên, mục đích chạy ở đây là để Eclipse build class cho chúng ta, sau khi build xong, bạn vào thư mục “bin” của Project, mở Terminal hoặc CMD tại đó, và cuối cùng gõ lệnh: java com.ngockhuong.ReadConsole
(với com.ngockhuong là package, ReadConsole: tên public class)