System.console () contre System.out

1. Introduction

Dans ce didacticiel, nous explorerons les différences entre System.console () et System.out .

2. System.console ()

Créons d'abord un programme pour récupérer l' objet Console :

void printConsoleObject() { Console console = System.console(); console.writer().print(console); }

L'exécution de ce programme à partir d'un terminal interactif produira quelque chose comme [email protected]

Cependant, l'exécuter à partir d'autres supports lèvera NullPointerException car l'objet console serait nul .

Ou, si nous exécutons le programme comme ci-dessous:

$ java ConsoleAndOut > test.txt

alors le programme lancera également une NullPointerException lorsque nous redirigeons le flux.

La classe Console fournit également des méthodes pour lire les mots de passe sans faire écho au caractère.

Voyons cela en action:

void readPasswordFromConsole() { Console console = System.console(); char[] password = console.readPassword("Enter password: "); console.printf(String.valueOf(password)); }

Cela demandera le mot de passe, et il ne fera pas écho aux caractères pendant que nous le saisissons.

3. System.out

Imprimons maintenant l'objet de System.out :

System.out.println(System.out);

Cela renverra quelque chose comme java.io.PrintStream.

La sortie sera la même de n'importe où.

System.out est utilisé pour imprimer des données dans le flux de sortie et il n'existe aucune méthode pour lire les données. Le flux de sortie peut être redirigé vers n'importe quelle destination telle qu'un fichier et la sortie restera la même.

Nous pouvons exécuter le programme comme:

$ java ConsoleAndOut > test.txt

Cela imprimera la sortie dans le fichier test.txt .

4. Différences

Sur la base des exemples, nous pouvons identifier quelques différences:

  • System.console () renvoie une instance java.io.Console lorsqu'elle est exécutée à partir d'un terminal interactif - en revanche, System.out renverra l' objet java.io.PrintStream quel que soit le support d'appel
  • Le comportement de System.out et System.console () est similaire si nous n'avons redirigé aucun flux; sinon, System.console () renvoie null
  • Lorsque plusieurs threads demandent une entrée, la console les met bien en file d'attente - alors que dans le cas de System.out, toutes les invites apparaissent simultanément

5. Conclusion

Nous avons appris dans cet article les différences entre System.console () et System.out . Nous avons expliqué que la console est utile lorsqu'une application est censée s'exécuter à partir d'une console interactive, mais elle présente certaines bizarreries qui doivent être notées et prises en compte.

Comme toujours, le code complet de cet article est disponible à l'adresse over sur GitHub.