console.writeline
和System.out.println
之间的技术差异究竟是什么? 我知道System.out.println
写入标准输出,但这是不是与控制台是一回事?console.writeline和System.out.println
我不完全了解documentation对于console.writeline
。
console.writeline
和System.out.println
之间的技术差异究竟是什么? 我知道System.out.println
写入标准输出,但这是不是与控制台是一回事?console.writeline和System.out.println
我不完全了解documentation对于console.writeline
。
下面是使用System.out
/.err
/.in
和之间的主要不同之处:
System.console()
返回零,如果应用程序没有在终端(though you can handle this in your application)System.console()
提供用于读取密码,而不回显字符System.out
和System.err
使用默认平台编码,而Console
类输出方法使用控制台编码后者的行为可能不会立即明显,但这样的代码可以证明的区别:
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);
}
}
}
在我的Windows XP具有窗口1252的系统编码和一个默认的控制台编码IBM850,此代码将写入:
???????
?Hello?
???????
┌─────┐
│Hello│
└─────┘
请注意,此行为取决于将控制台编码设置为与系统编码不同的编码。由于一系列历史原因,这是Windows的默认行为。
他们基本上是相同的,如果你的程序从一个交互式提示符下运行,并且您还没有重定向标准输入和标准输出:
public class ConsoleTest {
public static void main(String[] args) {
System.out.println("Console is: " + System.console());
}
}
结果:
$ java ConsoleTest
Console is: [email protected]
$ java ConsoleTest </dev/null
Console is: null
$ java ConsoleTest | cat
Console is: null
原因Console
存在的目的是提供在您从交互式命令行运行的特定情况下有用的功能:
Console
会很好地排队它们,而如果你使用System.in/out,那么所有提示将同时出现)。注意,重定向甚至一个在System.console()
流结果返回null
以上;另一个令人烦恼的是,当从其他程序(例如Eclipse或Maven)衍生出来时,通常没有可用的对象(Console
)。
首先我恐怕你的问题包含一个小错误。类Console中没有方法writeline。相反,类Console提供了返回PrintWriter的方法writer()。此打印作家有println()。
现在是什么
System.console().writer().println("hello from console");
和
System.out.println("hello system out");
之间的差异如果运行命令行,我认为是没有区别的应用程序。但是,如果控制台不可用System.console()返回null,而System.out仍然存在。如果您调用应用程序并将STDOUT重定向到文件,则可能会发生这种情况。
这是我刚刚实施的一个例子。
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");
}
}
当我运行命令提示符应用我有以下几点:
$ java TestConsole
[email protected]
hello from console
但是当我重定向标准输出到文件...
$ java TestConsole >/tmp/test
Exception in thread "main" java.lang.NullPointerException
at TestConsole.main(TestConsole.java:8)
8号线是console.writer().println()
。
这里的/ tmp /测试
console=null
的,我希望我的解释帮助的内容。
要导致代码显示为代码块,缩进每行有四个空间。 (尽管我刚刚为你完成了这个工作。) – BoltClock 2010-10-23 18:58:37
但是,有一个Console.printf和一个Console.format,它们都可以直接写入,而不需要提取介入的PrintWriter。奇怪:) – 2015-03-20 02:05:11
请参阅http://stackoverflow.com/questions/2369731/java-console-applications-is-system-out-still-the-way-to-go – 2010-10-23 18:39:12
也console.writeline不是一个Java方法(这是.net)...但我明白你在问什么:) – 2010-10-23 18:41:58