想要查看此教程的目录请点击:Java IO教程目录贴地址
System.in,System.out和System.err这三个流也是常见的数据源或数据目的地。最常用的可能就是程序利用System.out将数据输出到控制台了。
这三个流是在jvm启动的时候被Java运行时环境初始化的,所以你并不必去实例化它们。(虽然你可以在运行时改变他们)
System.in
System.in是一个InputStream,它是控制台程序的典型的接受键盘输入的流。由于数据经常通过配置文件或命令行参数传递给Java程序,所以不会经常用它。在GUI应用中,程序的输入是GUI提供的。这是一个来自Java IO中独立的input机制。
System.out
System.out是一个PrintStream。它经常把你写入的数据输出到控制台。它经常用在命令行工具中。在debug模式打印报告中也会经常用到它(虽然它不是最好的往事去输出debug信息)
System.err
System.err是一个PrintStream。它的作用有些像System.out,不同的是它一般用来打印错误日志。一些程序(比如Eclipse)会用红色字体来显示System.err的输出日志。
简单System.out + System.err 例子
下面是一个简单的例子来使用System.out和System.err:
try {
InputStream input = new FileInputStream("c:\\data\\...");
System.out.println("File opened...");
} catch (IOException e){
System.err.println("File opening failed:");
e.printStackTrace();
}
改变System的流
即使System的三个流是java.lang.System的三个静态成员,并且在虚拟机启动的时候就已经初始化好,但是你也可以用一个流来改变它们。仅仅是给System.in或System.out创建一个新的InputStream,进而所有的数据都可以被读写到新的流中。
使用System.setIn()、System.setOut()或System.setErr()其中一个方法,创建一个新的System流,举例说明:
OutputStream output = new FileOutputStream("c:\\data\\system.out.txt");
PrintStream printOut = new PrintStream(output);
System.setOut(printOut);
现在所有写入到System.out的数据都可以被定向到目录c:\data\system.out.txt了。但是请记住,你需要去确定在JVM关闭之前要刷新System.out和关闭这个文件,确保所有的数据已经被刷新到文件中了。