IO流(九):打印流-字节打印流PrintStream、字符打印流PrintWriter
目录
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)!