一,本章目标
①掌握System对IO的三种支持:System.out,System.err,System.in
②掌握System.out及System.err的区别
③掌握输入,输出重定向
二,具体内容
使用static final声明是全局常量,只要是常量,则单词字母需要大写,这也属于java的遗留问题。
2.1 System.out
使用System.out输出的时候就是将输出的位置定义在显示器之中
FileOutputStream是定位在文件里,而System.out是定位在屏幕上。
使用OutputStream完成屏幕上的输出,因为PrintStream是其子类。
例子如下:
很明显,就是对象多态性的体现,根据子类的不同,实现的功能也不同。
2.2 System.err
它表示的是错误的标准输出,如果程序出错了,可以使用它进行输出打印。
例子如下:
这个时候,有人会问:使用System.out输出不也一样吗?为什么要使用System.err呢?
注意:System.out存在缓存的功能,就是你输出的东西不一定会马上输出,而Systen.err会实时输出,单独使用的时候没什么区别,但是两者一起使用的话你就能看到,输出顺序和你期望的顺序是不一样的。
2.3 System.in
System.in实际上是一个键盘的输入流,其本身是InputStream类型的对象。那么,此时就可以用次方式完成从键盘读取数据的功能。
InputStream对应的是输入流,输入流的话肯定可以从指定位置上读取,之前使用的是FileInputStream,是从文件之中读取。
例子:
所有的数据已经输入进去了,但是又问题:
问题①:指定了输入数据的长度,如果现在输入的数据超过了长度,则只有部分输入成功
问题②:指定的byte数组长度是期数的话,则还可以出现中文乱码问题。
byte b[] = new byte[5];
如果不固定长度,就只能通过判断标记为来完成。例子如下:
现在的程序真的可以了吗?如果输入中文呢?
想要实现这个功能,就要使用BufferedReader类来完成。
2.4 输入输出重定向
为System.out输出重定向
此时将输出的位置重定向,所以所有的内容都向指定文件打印。实际上通过此操作就可以实现错误的重定向。
为System.err重定向
利用System.rtt向屏幕上输出,为了方便起见,使用内容流。例子如下:
为System.in重定向
默认情况下是从键盘输入,可以通过setIn方法设置输入流的位置。
一般来说,只会使用Sysstem.out的重定向。
三,总结
①System.out是希望用户可以看到的信息,
②System.err是不希望用户可以看到的信息
③System.in对应键盘的输入
以上的三个常量都可以重定向,但是一般只建议修改setOut。
注意:System.in读取的时候有时会出现重定向问题