Quelle est exactement la différence technique entre console.writeline
et System.out.println
? Je sais que System.out.println
écrit sur la sortie standard, mais n'est-ce pas la même chose que la console?
Je ne comprends pas bien le documentation pour console.writeline
.
Voici les principales différences entre System.out
_/_.err
_/_.in
et System.console()
:
System.console()
renvoie null si votre application n'est pas exécutée dans un terminal ( vous pouvez le gérer dans votre application )System.console()
fournit des méthodes pour lire le mot de passe sans faire écho aux caractèresSystem.out
_ et _System.err
_ utilisent le codage par défaut de la plate-forme, tandis que les méthodes de sortie de la classe Console
utilisent le codage de la console.Ce dernier comportement peut ne pas être immédiatement évident, mais un code comme celui-ci peut démontrer la différence:
_public class ConsoleDemo {
public static void main(String[] args) {
String[] data = { "\u250C\u2500\u2500\u2500\u2500\u2500\u2510",
"\u2502Hello\u2502",
"\u2514\u2500\u2500\u2500\u2500\u2500\u2518" };
for (String s : data) {
System.out.println(s);
}
for (String s : data) {
System.console().writer().println(s);
}
}
}
_
Sur mon Windows XP qui a un encodage système de windows-1252 et un encodage de console par défaut d'IBM850, ce code écrit:
_???????
?Hello?
???????
┌─────┐
│Hello│
└─────┘
_
Notez que ce comportement dépend du codage de la console défini sur un codage différent de celui du système. Ceci est le comportement par défaut sous Windows pour un tas de raisons historiques.
Ils sont essentiellement les mêmes, si votre programme est exécuté à partir d'une invite interactive et que vous n'avez pas redirigé stdin ou stdout:
public class ConsoleTest {
public static void main(String[] args) {
System.out.println("Console is: " + System.console());
}
}
résulte en:
$ Java ConsoleTest
Console is: Java.io.Console@2747ee05
$ Java ConsoleTest </dev/null
Console is: null
$ Java ConsoleTest | cat
Console is: null
La raison Console
existe pour fournir des fonctionnalités utiles dans le cas spécifique où vous êtes exécuté à partir d'une ligne de commande interactive:
Console
les placera correctement dans une file d'attente, alors que si vous utilisiez System.in/out, toutes les invites s'afficheraient simultanément).Notez qu'au-dessus de cette redirection même n des flux, System.console()
renvoie null
; une autre irritation est qu’il n’ya souvent aucun objet Console
disponible dans un autre programme tel que Eclipse ou Maven.
Premièrement, je crains que votre question ne comporte une petite erreur. Il n'y a pas de méthode writeeline dans la classe Console. Au lieu de cela, la classe Console fournit une méthode writer () qui renvoie PrintWriter. Ce graveur 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 est indisponible, System.console () renvoie la valeur null tant que System.out existe toujours. Cela peut arriver si vous appelez 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 ce qui suit:
$ Java TestConsole
console=Java.io.Console@93dcd
hello from console
mais quand j'ai redirigé le STDOUT au 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 aideront.
Il n'y a pas de Console.writeline
en Java. C'est en .NET.
La console et la sortie standard ne sont pas identiques. Si vous lisez la page Javadoc vous mentionné , vous verrez qu'une application peut accéder à une console uniquement si elle est appelée à partir de la ligne de commande et si le résultat n'est pas redirigé de cette manière.
Java -jar MyApp.jar > MyApp.log
La réponse de SimonJ couvre d'autres cas similaires, bien qu'il ait oublié le fait qu'il n'y a pas de Console.writeline
.