目录
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 代码演示以及注释
java">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 演示几种字节打印流常用的创建方式
java">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 代码演示以及注释
java">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) 来完成这一操作
代码如下,注释写得非常清晰
java">public class PrintWriterTest01 {public static void main(String[] args) {try (//创建指定字符集编码的字符打印流PrintWriter printWriter1 = new PrintWriter("src/main/resources/bbb.txt",Charset.forName("GBK"));//指定自动刷新的字符打印流,需要注意的是要先创建原始流-字符输出流FileWriterFileWriter fileWriter = new FileWriter("src/main/resources/bbb.txt",true);PrintWriter printWriter2 = new PrintWriter(fileWriter,false);//指定自动刷新,且指定编码的字符打印流,需要注意的是要先创建原始流字节输出流FileOutputStreamFileOutputStream 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(),作用是在控制台输出我们需要打印的日志
java">System.out.println("你好Java");
我们点进去源码可以看到,System.out.println()实际上用到的就是字节打印流PrintStream
既然可以打印日志到控制台,那是不是也可以打印日志到指定的文件呢?
下面我们用代码演示一下,非常简单!
java"> //在日志打印之前,设置日志最终打印的位置即可,非常简单
System.setOut( new PrintStream("src/main/resources/bbb.txt","UTF-8"));
System.out.println("你好Java");
这样输出内容重定向到指定文件中的操作就完成啦!
5、PrintStream和PrintWriter的共同点和区别
共同点:
打印流最核心的功能还是输出数据出去。
打印数据的功能上是一模一样的:都是使用方便,性能高效(核心优势)
区别:
PrintStream继承自字节输出流OutputStream,因此支持写字节数据的方法。
PrintWriter继承自字符输出流Writer,因此支持写字符数据出去。
这就是我对打印流的理解,希望能帮到大家,有问题的地方欢迎大家一起讨论!
后续会不断更新作品,欢迎大家一起讨论学习。❤❤❤