【Java】字符打印流

一、前言

字符打印流和字节打印流两者是非常类似的。

image-20240504215214027

只不过字符打印流底层多了一个缓冲区,因此字符打印流效率更高一些。

并且在写出数据的时候,如果想要自动刷新,那么必须要手动开启。

想要学习一个类,首先还是要看它的构造方法


二、构造方法

构造方法其实跟字节打印流是一样的。

image-20240504215427571

因此关于字符打印流我们只需要记住:字符流底层有缓冲区,想要自动刷新需要手动开启。


三、成员方法

成员方法基本上也一模一样

image-20240504215534231

四、代码示例

字符打印流的构造方法还是比较多的,但我们可以将这些构造方法分为三组。

第一组:参数都是关联基本流的,可以关联字符输出流,也可以关联字节输入流。在第一组中是可以开启自动刷新的,因为它有 autoFlush参数。它还可以指定 字符编码

第二组:第一个参数是一个字符串类型所表示的文件路径,第二组构造中是不能开始自动刷新的,但是它可以指定字符编码。

剩下来的就是第三组,在第三组中,第一个参数是 File 所表示的路径,而且在第三组中也无法开启自动刷新。

因此在以后我们真正最常用的其实还是第一组中的两个构造。

那为什么不用第一组的最后一个三个参数的呢?它多出来的参数表示字符编码,而我们以后在实际开发中,默认使用字符编码都是 UTF-8,因此是不需要指定的。

image-20240505080958445

如下代码,就算没有关流,这句话也是立马写到本地了,就是因为在这开启了自动刷新。

//1.创建字符打印流的对象
PrintWriter pw = new PrintWriter(new FileWriter("myio\\a.txt"), true);
//2.写出数据
pw.println("今天你终于叫我名字了,虽然叫错了,但是没关系,我马上改");
image-20240505081520638

但是当你关闭了自动刷新,此时就不会立马写到本地了

image-20240505081557077

完整代码

//1.创建字符打印流的对象
PrintWriter pw = new PrintWriter(new FileWriter("myio\\a.txt"), true);

//2.写出数据
pw.println("今天你终于叫我名字了,虽然叫错了,但是没关系,我马上改");
pw.print("你好你好"); // 表示只打印不换行
pw.printf("%s爱上了%s", "阿珍", "阿强"); // 不换行

//3.释放资源
pw.close();

五、打印流的应用场景

其实我们几乎每天都在用,因为之前每天都会写输出语句,这个里面其实就用到了打印流。

System.out.println("123");

System:Java里面已经定义好的一个类,而且这个类是用 final 修饰,表示这个类是最终类,不能再有其他的子类了。

image-20240505082323949

往下找,可以发现:outSystem类 中的一个静态变量,因此在代码中,我们就可以通过类名直接调用静态变量 System.out

out 的类型是 PrintStream,因此调用 System.out 相当于获取的就是一个打印流的对象。

这个对象是不需要我们自动创建的,而是虚拟机在启动后,由虚拟机自己创建。

这个打印流不是指向文件,而是默认指向控制台。

因此我们可以改写 System.out.println("123")

//获取打印流的对象,此打印流在虚拟机启动的时候,由虚拟机创建,默认指向控制台
//所以这个打印流是一个特殊的打印流,它还有一个特殊的名字:系统中的标准输出流,是不能关闭,在系统中是唯一的。
//如果关闭了就不能再次启动,除非你将虚拟机再次重启一下。
PrintStream ps = System.out;

//拿着对象ps调用打印流中的方法println
//这个方法有三个作用:写出数据,自动换行,自动刷新
ps.println("123");

//只不过平时懒得中间再定义一个变量,因此我们是使用链式编程来书写的
System.out.println("123");
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于 Java 字符打印乱码的问题,可以考虑以下几个方面的原因和解决方法: 1. 字符编码不匹配:Java 字符串内部使用 Unicode 编码,而在进行输入输出时需要指定正确的字符编码。如果输入输出字符编码与字符串的编码不一致,就会出现乱码。可以尝试使用 `getBytes()` 方法将字符串转换为指定编码的字节数组,并在输出时使用正确的字符编码解析。例如: ```java String str = "你好"; byte[] bytes = str.getBytes("UTF-8"); System.out.println(new String(bytes, "UTF-8")); ``` 2. 控制台字符编码不支持:有些操作系统的控制台默认字符编码可能不支持显示特定字符,导致输出乱码。可以尝试在控制台中设置合适的字符编码。例如,在 Windows 中可以使用以下命令设置控制台编码为 UTF-8: ``` chcp 65001 ``` 3. IDE 或编辑器的字符编码设置不正确:有些 IDE 或文本编辑器默认使用的字符编码可能与源代码文件的实际编码不一致,导致读取或保存文件时出现乱码。可以尝试更改 IDE 或编辑器的默认字符编码设置。 4. 字符串包含特殊字符或非打印字符:如果字符串中包含特殊字符或非打印字符,可能会导致乱码。可以尝试使用转义字符或者特定的字符处理方法来处理这些字符。 希望以上解决方法对您有帮助。如果问题仍然存在,请提供更多的详细信息和代码示例,以便更好地帮助您解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值