Tout d'abord, je crains que votre question ne contienne une petite erreur. Il n'y a pas de méthode writeline dans la classe Console. Au lieu de cela, la classe Console fournit la méthode writer() qui renvoie PrintWriter. Cet écrivain d'impression a println().
Maintenant, quelle est la différence entre
System.console().writer().println("hello from console");
et
System.out.println("hello system out");
Si vous exécutez votre application en ligne de commande, je pense qu'il n'y a pas de différence. Mais si la console n'est pas disponible, System.console() renvoie null alors que System.out existe toujours. Cela peut arriver si vous invoquez votre application et effectuez une redirection de STDOUT vers un fichier.
Voici un exemple que je viens de mettre en œuvre.
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");
}
}
Lorsque j'ai lancé l'application à partir de l'invite de commande, j'ai obtenu le résultat suivant :
$ java TestConsole
console=java.io.Console@93dcd
hello from console
mais quand j'ai redirigé le STDOUT vers un fichier...
$ java TestConsole >/tmp/test
Exception in thread "main" java.lang.NullPointerException
at TestConsole.main(TestConsole.java:8)
La ligne 8 est console.writer().println()
.
Voici le contenu de /tmp/test
console=null
J'espère que mes explications vous aideront.