Trước tiên, tôi e rằng câu hỏi của bạn có một chút sai lầm. Không có phương thức writeline trong Bảng điều khiển lớp. Thay vào đó, bảng điều khiển lớp cung cấp trình viết phương thức () trả về PrintWriter. Người viết bản in này có println ().
Bây giờ sự khác biệt giữa
System.console().writer().println("hello from console");
và
System.out.println("hello system out");
Nếu bạn chạy ứng dụng của mình từ dòng lệnh, tôi nghĩ không có sự khác biệt. Nhưng nếu bảng điều khiển không khả dụng, System.console () trả về null trong khi System.out vẫn tồn tại. Điều này có thể xảy ra nếu bạn gọi ứng dụng của mình và thực hiện chuyển hướng STDOUT đến tệp.
Đây là một ví dụ mà tôi vừa thực hiện.
import java.io.Console;
public class TestConsole {
public static void main(String[] args) {
Console console = System.console();
System.out.println("console=" + console);
console.writer().println("hello from console");
}
}
Khi tôi chạy ứng dụng từ dấu nhắc lệnh, tôi nhận được những điều sau:
$ java TestConsole
console=java.io.Console@93dcd
hello from console
nhưng khi tôi chuyển hướng STDOUT đến tệp ...
$ java TestConsole >/tmp/test
Exception in thread "main" java.lang.NullPointerException
at TestConsole.main(TestConsole.java:8)
Dòng 8 là console.writer().println()
.
Đây là nội dung của / tmp / test
console=null
Tôi hy vọng những lời giải thích của tôi sẽ giúp ích.