console.writeline
和System.out.println
有什么技术上的区别呢?我知道System.out.println
是将内容写入标准输出, 但这与控制台不是一样的吗?我不太理解
console.writeline
的文档说明。console.writeline
和System.out.println
有什么技术上的区别呢?我知道System.out.println
是将内容写入标准输出, 但这与控制台不是一样的吗?console.writeline
的文档说明。System.out
/.err
/.in
和 System.console()
的主要区别:
System.console()
返回 null (尽管您可以在应用程序中处理此问题)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);
}
}
}
???????
?Hello?
???????
┌─────┐
│Hello│
└─────┘
如果你的程序是从交互式提示符中运行的,并且你没有重定向标准输入或输出,那么它们本质上是相同的:
public class ConsoleTest {
public static void main(String[] args) {
System.out.println("Console is: " + System.console());
}
}
结果是:
$ java ConsoleTest
Console is: java.io.Console@2747ee05
$ 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
console=java.io.Console@93dcd
hello from console
但是当我将STDOUT重定向到文件时...
$ java TestConsole >/tmp/test
Exception in thread "main" java.lang.NullPointerException
at TestConsole.main(TestConsole.java:8)
第8行是console.writer().println()
。
这里是/tmp/test的内容
console=null
我希望我的解释能够帮助到你。
Java中没有Console.writeline
,它在.NET中。
控制台和标准输出不同。如果你阅读了你提到的Javadoc页面mentioned,你会发现只有当应用程序从命令行调用并且输出未被重定向时,才能访问控制台。
java -jar MyApp.jar > MyApp.log
Console.writeline
。System.out
引用了一个 PrintStream 实例。
System.console.writer
引用了一个 PrintWriter 实例。