自学内容网 自学内容网

IO流(九):打印流-字节打印流PrintStream、字符打印流PrintWriter

目录

1、什么是打印流?

2、字节打印流-PrintStream

2.1 代码演示以及注释

2.2 演示几种字节打印流常用的创建方式

3、字符打印流-PrintWriter

3.1 代码演示以及注释

3.2 演示几种字符打印流常用的创建方式

4、案例-System.out.println();输出内容重定向到指定文件中

5、PrintStream和PrintWriter的共同点和区别


1、什么是打印流?

分为字节打印流(PrintStream)和字符打印流(PrintWriter)

作用:可以实现更方便,更高效的打印数据出去,能实现打印啥出去就是啥。

你写的是什么,就能打印什么,不像字节流字符流那样需要转为字节或者字符。

非常好用,建议开发当中用起来。

2、字节打印流-PrintStream

2.1 代码演示以及注释

public class PrintStreamTest1 {
    public static void main(String[] args) {
        try (
                //创建字节打印流
                PrintStream printStream = new PrintStream("src/main/resources/bbb.txt");

        ) {

            printStream.println("我是打印流");
            printStream.println('你');
            printStream.println(true);
            //也可以用.write()方法写数据,用法和FileOutputStream一致,推荐使用printStream(),写什么就打印什么
            printStream.write(97);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

打印的数据我们可以看到,我们写什么就打印什么,非常好用。

2.2 演示几种字节打印流常用的创建方式

public class PrintStreamTest1 {
    public static void main(String[] args) {
        try (
                //创建指定字符集编码的字节打印流
                PrintStream printStream1 = new PrintStream("src/main/resources/bbb.txt","GBK");

                //指定自动刷新的字节打印流,需要注意的是要先创建原始流
                FileOutputStream fileOutputStream = new FileOutputStream("src/main/resources/bbb.txt",true);
                PrintStream printStream2 = new PrintStream(fileOutputStream,true);

                //指定自动刷新,且指定编码的字节打印流,需要注意的是要先创建原始流
                FileOutputStream fileOutputStream1 = new FileOutputStream("src/main/resources/bbb.txt",true);
                PrintStream printStream3 = new PrintStream(fileOutputStream1,true,"UTF-8");

        ) {
            printStream1.println("我是指定GBK字符集编码的打印流");
            printStream2.println("我是自动刷新的打印流");
            printStream3.println("我是自动刷新且指定UTF-8字符集编码的打印流");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

从打印出来的数据我们可以看出,打印流能设置字符编码,也能设置自动刷新(会自动将缓冲区中的内容flush输出到目标文件,而不是等到缓冲区满或程序结束时才进行输出。)

由于我们读取bbb.txt时的字符集编码是UTF-8,我们第一行是用GBK字符集编码来打印的,所以出现乱码是正常的。

我们点进去源码可以看到,PrintStream底层还封装了一个缓冲流,我们都知道缓冲流的效率是非常高的。

3、字符打印流-PrintWriter

使用方法和字节打印输出流PrintStream非常类似

3.1 代码演示以及注释

public class PrintWriterTest01 {
    public static void main(String[] args) {
        try (
//                //创建字符打印流
                PrintWriter printWriter = new PrintWriter("src/main/resources/bbb.txt");

        ) {

            printWriter.println("我是字符打印流");
            printWriter.println('你');
            printWriter.println(true);
            //也可以用.write()方法写数据,用法和FileWriter一致,推荐使用PrintWriter,写什么就打印什么
            printWriter.write(97);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3.2 演示几种字符打印流常用的创建方式

需要注意的是,当你想要设置自动刷新且指定字符集编码时,我们需要定义一个原始的字节输出流(FileOutputStream) 来完成这一操作

代码如下,注释写得非常清晰

public class PrintWriterTest01 {
    public static void main(String[] args) {
        try (
                //创建指定字符集编码的字符打印流
                PrintWriter printWriter1 = new PrintWriter("src/main/resources/bbb.txt",Charset.forName("GBK"));

                //指定自动刷新的字符打印流,需要注意的是要先创建原始流-字符输出流FileWriter
                FileWriter fileWriter = new FileWriter("src/main/resources/bbb.txt",true);
                PrintWriter printWriter2 = new PrintWriter(fileWriter,false);

                //指定自动刷新,且指定编码的字符打印流,需要注意的是要先创建原始流字节输出流FileOutputStream
                FileOutputStream fileOutputStream = new FileOutputStream("src/main/resources/bbb.txt",true);
                PrintWriter printWriter3 = new PrintWriter(fileOutputStream,true,Charset.forName("UTF-8"));

        ) {

            printWriter1.println("我是指定GBK字符集编码的字符打印流");
            printWriter2.println("我是不需要自动刷新的字符打印流");
            printWriter3.println("我是自动刷新且指定UTF-8字符集编码的字符打印流");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

由于我们读取bbb.txt时的字符集编码是UTF-8,我们第一行是用GBK字符集编码来打印的,所以出现乱码是正常的。

我们点进去源码可以看到,PrintWriter底层也是封装了一个缓冲流。

4、案例-System.out.println();输出内容重定向到指定文件中

我们平时用的最多的一行代码System.out.println(),作用是在控制台输出我们需要打印的日志

System.out.println("你好Java");

我们点进去源码可以看到,System.out.println()实际上用到的就是字节打印流PrintStream

既然可以打印日志到控制台,那是不是也可以打印日志到指定的文件呢?

下面我们用代码演示一下,非常简单!

  //在日志打印之前,设置日志最终打印的位置即可,非常简单
System.setOut( new PrintStream("src/main/resources/bbb.txt","UTF-8"));
System.out.println("你好Java");

这样输出内容重定向到指定文件中的操作就完成啦!

5、PrintStream和PrintWriter的共同点和区别

共同点:

打印流最核心的功能还是输出数据出去。

打印数据的功能上是一模一样的:都是使用方便,性能高效(核心优势)

区别:

PrintStream继承自字节输出流OutputStream,因此支持写字节数据的方法。

PrintWriter继承自字符输出流Writer,因此支持写字符数据出去。

 

 

 

这就是我对打印流的理解,希望能帮到大家,有问题的地方欢迎大家一起讨论!

后续会不断更新作品,欢迎大家一起讨论学习。❤❤❤


原文地址:https://blog.csdn.net/rainingCSDN/article/details/143860882

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!