Java IO: System.in, System.out, System.err
System.in, System.out, System.err这3个流同样是常见的数据来源和数据流目的地。使用最多的可能是在控制台程序里利用System.out将输出打印到控制台上。
JVM启动的时候通过Java运行时初始化这3个流,所以你不需要初始化它们(尽管你可以在运行时替换掉它们)。
System.inSystem.in是一个典型的连接控制台程序和键盘输入的InputStream流。通常当数据通过命令行参数或者配置文件传递给命令行Java程序的时候,System.in并不是很常用。图形界面程序通过界面传递参数给程序,这是一块单独的Java IO输入机制。
System.outSystem.out是一个PrintStream流。System.out一般会把你写到其中的数据输出到控制台上。System.out通常仅用在类似命令行工具的控制台程序上。System.out也经常用于打印程序的调试信息(尽管它可能并不是获取程序调试信息的最佳方式)。
System.errSystem.err是一个PrintStream流。System.err与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.in, System.out, System.err这3个流是java.lang.System类中的静态成员(译者注:这3个变量均为final static常量),并且已经预先在JVM启动的时候初始化完成,你依然可以更改它们。只需要把一个新的InputStream设置给System.in或者一个新的OutputStream设置给System.out或者System.err,之后的数据都将会在新的流中进行读取、写入。
可以使用System.setIn(), System.setOut(), System.setErr()方法设置新的系统流(译者注:这三个方法均为静态方法,内部调用了本地native方法重新设置系统流)。例子如下:
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(译者注:调用flush()),确保System.out把数据输出到了文件中。
转载自 并发编程网 - ifeve.com相关文章
- java实现基于IO流存取信息的【学生成绩管理系统】
- java理论基础学习三
- Exception in thread "main" java.io.IOException: Mkdirs failed to create /var/folders/q0/1wg8sw1x0dg08cmm5m59sy8r0000gn/T/hadoop-unjar6090005653875084137/META-INF/license at org.apache.hadoop.util.Run
- 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制
- Java图片加水印
- Java IO 之 OutputStream源码
- Java 老鼠走迷宫 汉诺塔
- 【Java】整理关于java的String类,equals函数和比较操作符的区别
- 【Java】java的内存浅析
- 第七节:详细讲解Java中的日期,java.util.date
- Java类更改常量后编译不生效
- java.lang.OutOfMemoryError: Java heap space
- hadoop格式化:java.io.IOException: Incompatible clusterIDs in /home/lxh/hadoop/hdfs/data: namenode clusterID
- elasticsearch之JAVA环境变量报错:could not find java; set JAVA_HOME or ensure java is in PATH
- java高级用法之:在JNA中将本地方法映射到JAVA代码中
- Java_类似java.lang.VerifyError: Expecting a stackmap frame at branch target 22 in method的解决方法
- 『Java练习生的自我修养』java-se进阶⁵ • 常用IO流
- java中的线程如何理解——精简
- 【Java UI】HarmonyOS添加日历事件
- [java][db]JAVA分布式事务原理及应用
- Eclipse迅速执行:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
- 2014-5-22 java.lang.OutOfMemoryError: Java heap space的一次诊断
- Java提高篇(二):IO字节流、字符流和处理流
- java.lang.NoClassDefFoundError: org/springframework/util/unit/DataSize
- Java 封装
- Java小白入门200例15之求最小公倍数
- Java 报错 Information:java: javacTask: 源发行版 8 需要目标发行版 1.8
- 一次java Cpu占用过高的排查
- 【Java I/O 流】文件的操作——java.io.File 类详解