且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

打印输出流PrintStream和PrintWriter(五)下

更新时间:2022-02-19 22:24:45

三. System 对 IO 的支持


我们在刚刚学习 Java的时候,编写的第一个程序,


public class Hello{

    public static void main(String[] args){

        System.out.println("Hello World!!!");
    }
}


会向控制台打印输出 “Hello World!!!”


查看 System 的类 API, 会发现


打印输出流PrintStream和PrintWriter(五)下


这儿的 PrintStream 就是 上面的字节打印输出流 PrintStream.

其中, System 类中还有这三个方法,


打印输出流PrintStream和PrintWriter(五)下


可以改变输出流的位置, 一会用得上, 先找出来。


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);
}


运行程序,打印输出:


打印输出流PrintStream和PrintWriter(五)下


输出,也可以输出到指定的输出流


三.一.二 输出信息到指定的输出流


@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 文件有相应的信息。


打印输出流PrintStream和PrintWriter(五)下


三.二 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("出错了");
        }
    }


运行程序,观察控制台输出:


打印输出流PrintStream和PrintWriter(五)下


两者效果是一样的, 只是输出信息的字体颜色有些区别。


三.二.二 输出错误信息到指定的输出流


  @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 文件内容


打印输出流PrintStream和PrintWriter(五)下


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));
    }


运行程序, 控制台可以输入相应的内容, 会阻塞程序


打印输出流PrintStream和PrintWriter(五)下


输入的内容,都会当成字节数组, 无论是数字,还是小数,还是布尔。 需要我们手动区分。


三.三.二 指定输入源


   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));
    }


运行程序,控制台打印输出:


打印输出流PrintStream和PrintWriter(五)下


谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!