Cách nhập dữ liệu từ bàn phím (đọc dữ liệu từ console) trong Java

Trong Java, có 3 cách để nhập dữ liệu từ bàn phím (đọc dữ liệu từ console):

  1. Dùng BufferedReader + InputStreamReader (Những phiên bản Java cũ)
  2. Dùng Scanner (JDK 1.5)
  3. 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ả

Cách nhập dữ liệu từ bàn phím (đọc dữ liệu từ console) trong Java
Chạy thử chương trình nhập dữ liệu từ Console sử dụng System.console()
[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).

[/alert-warning] [alert-success]

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)

[/alert-success]

Tham khảo

  1. JavaDoc – java.io.Console
  2. JavaDoc – java.util.Scanner
  3. Why do we use console class

0 0 votes
Đánh giá bài viết
Nhận thông báo
Thông báo khi có
guest

0 Bình luận
Phản hồi nội tuyến
Xem tất cả các bình luận