究竟是什么之间的技术差异console.writeline和System.out.println?我知道System.out.println写入标准输出但这与控制台不一样吗?
我不完全理解的文档进行console.writeline.
McD*_*ell 121
以下是使用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);
    }
  }
}
在我的Windows XP上,其系统编码为windows-1252,默认控制台编码为IBM850,此代码将写入:
???????
?Hello?
???????
???????
?Hello?
???????
请注意,此行为取决于将控制台编码设置为与系统编码不同的编码.由于一系列历史原因,这是Windows上的默认行为.
Sim*_*onJ 15
它们基本相同,如果您的程序是从交互式提示运行的,并且您没有重定向stdin或stdout:
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; 另一个恼人的是,Console当从Eclipse或Maven等其他程序中产生时,通常没有可用的对象.
首先,我担心你的问题包含一些错误.类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
我希望我的解释有所帮助.
| 归档时间: | 
 | 
| 查看次数: | 394859 次 | 
| 最近记录: |