三. System 对 IO 的支持
我们在刚刚学习 Java的时候,编写的第一个程序,
public class Hello{ public static void main(String[] args){ System.out.println("Hello World!!!"); } }
会向控制台打印输出 “Hello World!!!”
查看 System 的类 API, 会发现
这儿的 PrintStream 就是 上面的字节打印输出流 PrintStream.
其中, System 类中还有这三个方法,
可以改变输出流的位置, 一会用得上, 先找出来。
System.in 表示从控制台输入, 用于接收从控制台输入的内容
System.out, 表示输出到控制台,输出正确的信息
System.err, 表示输出到控制台,输出错误的信息。
三.一 System.out
三.一.一 输出信息到控制台
@Test public void outTest(){ //控制台 PrintStream printStream= System.out; printStream.print("你好啊"); printStream.println("你好不"); String name="两个蝴蝶飞"; int age=24; //打印 printStream.printf("名称%s,年龄%d:",name,age); }
运行程序,打印输出:
输出,也可以输出到指定的输出流
三.一.二 输出信息到指定的输出流
@Test public void out2Test() throws Exception{ File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"out.txt"); //设置地方 PrintStream out=new PrintStream(new FileOutputStream(file,true)); //设置输出的地方 System.setOut(out); out.print("你好啊"); out.println("你好不"); String name="两个蝴蝶飞"; int age=24; out.printf("名称%s,年龄%d:",name,age); }
运行程序, 会发现 out.txt 文件有相应的信息。
三.二 System.in
输出的是错误的信息。
三.二.一 输出错误信息到控制台
@Test public void errTest(){ PrintStream printStream= System.err; PrintStream out= System.out; try { out.printf("正常打印"); printStream.print("错误打印"); int a=10/0; } catch (Exception e) { printStream.printf("出错了"); } }
运行程序,观察控制台输出:
两者效果是一样的, 只是输出信息的字体颜色有些区别。
三.二.二 输出错误信息到指定的输出流
@Test public void err2Test() throws Exception{ File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"err.txt"); PrintStream err=new PrintStream(new FileOutputStream(file,true)); //设置内容 System.setErr(err); err.print("你好啊"); err.println("你好不"); String name="两个蝴蝶飞"; int age=24; err.printf("名称%s,年龄%d:",name,age); }
运行程序, 观察 err.txt 文件内容
System.out 与 System.err 没有区别,只能从概念上区分, out输出正确的信息,err输出的是错误的信息。
三.三 System.in
用于接收控制台的输入情况
三.三.一 将控制台当输入源
public static void main(String[] args) { try { inTest(); } catch (Exception e) { e.printStackTrace(); } } //注意,是字节读取,会存在乱码情况 public static void inTest() throws Exception{ System.out.println("请输入你的内容:"); InputStream inputStream= System.in; byte[] bytes=new byte[6]; //将输入的内容放置到 bytes 字节数组里 inputStream.read(bytes); System.out.println("输出内容:"+new String(bytes)); }
运行程序, 控制台可以输入相应的内容, 会阻塞程序
输入的内容,都会当成字节数组, 无论是数字,还是小数,还是布尔。 需要我们手动区分。
三.三.二 指定输入源
public static void main(String[] args) { try { in2Test(); } catch (Exception e) { e.printStackTrace(); } } public static void in2Test() throws Exception{ File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"out.txt"); InputStream in=new FileInputStream(file); System.out.println("请输入你的内容:"); System.setIn(in); byte[] bytes=new byte[1024]; int len=in.read(bytes); System.out.println("输出内容:"+new String(bytes,0,len)); }
运行程序,控制台打印输出:
谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!