Primeiro, receio que sua pergunta contenha um pequeno erro. Não há método writeline na classe Console. Em vez disso, a classe Console fornece o método writer () que retorna PrintWriter. Este gravador de impressão possui println ().
Agora, qual é a diferença entre
System.console().writer().println("hello from console");
e
System.out.println("hello system out");
Se você executar seu aplicativo na linha de comando, acho que não há diferença. Mas se o console estiver indisponível, System.console () retornará nulo enquanto System.out ainda existir. Isso pode acontecer se você chamar seu aplicativo e executar o redirecionamento de STDOUT para o arquivo.
Aqui está um exemplo que acabei de implementar.
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");
}
}
Quando executei o aplicativo no prompt de comando, obtive o seguinte:
$ java TestConsole
console=java.io.Console@93dcd
hello from console
mas quando redirecionei o STDOUT para o arquivo ...
$ java TestConsole >/tmp/test
Exception in thread "main" java.lang.NullPointerException
at TestConsole.main(TestConsole.java:8)
A linha 8 é console.writer().println()
.
Aqui está o conteúdo de / tmp / test
console=null
Espero que minhas explicações ajudem.