[二十四]JavaIO之PrintWriter
功能简介
| PrintWriter实现了PrintStream 中的所有 print 方法,除了那些用于写入原始字节的方法,对于那些字节,程序应该使用未编码的字节流进行写入 |
|
PrintStream会在换行符时自动调用自动刷新
PrintWriter在这一点上与PrintWriter不同,
只有在调用 println、printf 或 format 的其中一个方法时才可能完成此操作
|
| 类似,PrintStream 此类中的方法不会抛出 I/O 异常,可以通过 checkError() 检查是否出现错误 |
| PrintWriter也是装饰器模式 只不过看起来没那么典型而已 他直接继承Writer 省略了抽象装饰器角色Decorator PrintWriter 既充当了Decorator也是一个ConcreteDecorator 它内部包含了一个Writer out |
|
构造方法
|
构造方法主要内容包括下面三部分:
1. 首先需要一个Writer
2. 自动刷新的标志
3. 字符编码的设置
|
|
对于一个Writer
1. 他要么就是一个直接的Writer
2. 要么是一个new OutputStreamWriter( OutputStream) 把OutputStream转换为Writer
3. 另外,通过File或者String路径名,也可以构造FileOutputStream ,他就是一个OutputStream,也就是下面的形式:
new OutputStreamWriter( new FileOutputStream(File/String路径) )
|
| 自动刷新,如果不传递,默认false 编码如果不设置,那么是系统默认 |
最根本的构造方法是![]() |
| 最根本的为什么没有字符编码相关的? 其实, 还有一个私有的 私有的构造方法,将带有字符编码情况的进行了二次的包装 在创建 OutputStreamWriter时使用 私有的构造方法还是绕回去到上面说的这个根本的构造方法去了 ![]() |
| 你会从构造方法中可以看得出来 如果构造方法中指定了编码 将会经由这个私有的构造方法转发下 如果没指定将会使用我们上面说的那个最根本的形式 public PrintWriter(Writer out,
boolean autoFlush) {
|
| 不指定编码的 全部都是使用PrintWriter(Writer out, boolean autoFlush) ![]() |
| 带编码的借助于私有构造方法进行请求转发 private PrintWriter(Charset charset, File file) ![]() |
| 说了那么多,其实也只还是需要记住下面这一个就好了 PrintWriter(Writer out, boolean autoFlush) 只有File参数或者String路径参数 才会设置编码的参数, 如果设置了编码的参数的话,将会在把他们转换为Writer时, 也就是 new OutputStreamWriter 中通过指定编码参数构造 |
Write方法
| write方法的本质还是将数据写入到输出流 提供了5个版本的write |
|
void write(char[] buf)
将字符数组 写入
void write(char[] buf, int off, int len)
将字符数组的某一部分 写入
void write(int c)
将单个字符 写入
void write(String s)
将字符串 写入
void write(String s, int off, int len)
将字符串的某一部分 写入
|
|
三个基础方法,两个简化版方法
看得出来,类似PrintStream PrintWriter 也不会抛出IOException异常
可以通过 checkError 方法查看 trouble 的状态
|
|
|
print(xxx) /println(xxx)
| println() 通过写入行分隔符字符串终止当前行。行分隔符字符串由系统属性 line.separator 定义,不一定是单个换行符 ('\n')
|
|
print(boolean)
|
![]() |
+ println() = println(boolean) |
|
print(char)
|
![]() |
+ println() = println(char) |
|
print(int)
|
![]() |
+ println() = println(int) |
|
print(long)
|
![]() |
+ println() = println(long) |
|
print(float)
|
![]() |
+ println() = println(float) |
|
print(double)
|
![]() |
+ println() = println(double) |
|
print(char[])
|
![]() |
+ println() = println(char[]) |
|
print(String)
|
![]() |
+ println() = println(String) |
| print(Object) | ![]() |
println(String.valueOf(Object))+ println() = println(Object) 稍微特殊,先转换为String String.valueOf(Object) 然后print(String)+ println() |
| 可以看得出来 print系列都是调用的write方法 而且,基本上是write(String s)方法 boolean 会翻译成 字符串 true 或者false,然后调用write String 如果是null 翻译成字符串 null 然后调用write 除了Object略微特殊以外,其他所有的print 和 println结合之后可以产生对应的println(xxx)的形式 |
append
| 三个版本的append方法
append(char)
append(java.lang.CharSequence)
append(java.lang.CharSequence, int, int)
内部全部都是依赖于write方法
|
|
printf 与 format
PrintWriter内部也有一个Formatter![]() |
|
printf(java.util.Locale, java.lang.String, java.lang.Object...)
printf(java.lang.String, java.lang.Object...)
format(java.util.Locale, java.lang.String, java.lang.Object...)
format(java.lang.String, java.lang.Object...)
|
| printf借助于format format依赖Formatter ![]() |
| jdk1.8中 format方法与PrintStream 中几乎一样的,几乎一样的,几乎一样的.... |
| PrintWriter提供了close以及flush方法 如下图所示,依赖于内部out 的 close和flush 也没什么好说的 |
|
总结
| 基本数据类型和Object 会使用String.valueOf进行转换 |
| 字符 字符数组 String本身就是字符/字符串的形式 |
[二十四]JavaIO之PrintWriter的更多相关文章
- Bootstrap<基础二十四> 缩略图
Bootstrap 缩略图.大多数站点都需要在网格中布局图像.视频.文本等.Bootstrap 通过缩略图为此提供了一种简便的方式.使用 Bootstrap 创建缩略图的步骤如下: 在图像周围添加带有 ...
- 二十四、Struts2中的UI标签
二十四.Struts2中的UI标签 Struts2中UI标签的优势: 数据回显 页面布局和排版(Freemark),struts2提供了一些常用的排版(主题:xhtml默认 simple ajax) ...
- WCF技术剖析之二十四: ServiceDebugBehavior服务行为是如何实现异常的传播的?
原文:WCF技术剖析之二十四: ServiceDebugBehavior服务行为是如何实现异常的传播的? 服务端只有抛出FaultException异常才能被正常地序列化成Fault消息,并实现向客户 ...
- VMware vSphere 服务器虚拟化之二十四 桌面虚拟化之手动池管理物理机
VMware vSphere 服务器虚拟化之二十四 桌面虚拟化之手动池管理物理机 VMwareView手动池可以管理物理计算机 说明: 环境基于实验二十三 1.准备一台Windows 7的物理计算机名 ...
- Bootstrap入门(二十四)data属性
Bootstrap入门(二十四)data属性 你可以仅仅通过 data 属性 API 就能使用所有的 Bootstrap 插件,无需写一行 JavaScript 代码.这是 Bootstrap 中的一 ...
- 3360: [Usaco2004 Jan]算二十四
3360: [Usaco2004 Jan]算二十四 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 6 Solved: 6[Submit][Statu ...
- JAVA之旅(二十四)——I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习
JAVA之旅(二十四)--I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习 JAVA之旅林林总总也是写了二十多篇了,我们今天终于是接触到了I/O了 ...
- 二十四. Python基础(24)--封装
二十四. Python基础(24)--封装 ● 知识结构 ● 类属性和__slots__属性 class Student(object): grade = 3 # 也可以写在__slots ...
- (C/C++学习笔记) 二十四. 知识补充
二十四. 知识补充 ● 子类调用父类构造函数 ※ 为什么子类要调用父类的构造函数? 因为子类继承父类,会继承到父类中的数据,所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程. ...
随机推荐
- Do Now 一个让你静心学习的APP——团队博客
Do Now 一个让你静心学习的APP 来自油条只要半根团队的智慧凝聚的产物! 团队博客总目录: 团队作业第一周 团队作业第二周 Do Now -- 团队冲刺博客一 Do-Now-团队Scrum 冲刺 ...
- Android Keystore 对称-非对称加密
Android数据加密: Anroid数据加密方式 Android 提供了 KeyStore 等可以长期存储和检索加密密钥的机制,Android KeyStore 系统特别适合于存储加密密钥. “An ...
- Makefile = ?= := 区别 $@,$^,$<
= 是最基本的赋值:= 是覆盖之前的值?= 是如果没有被赋值过就赋予等号后面的值+= 是添加等号后面的值 1.“=” make会将整个makefile展开后,再决定变量的值.也就是说,变量的值将会是整 ...
- CSS矩形、三角形等
1.圆形 CSS代码如下:宽高一样,border-radius设为宽高的一半 #circle { width: 100px; height: 100px; background: red; -moz- ...
- jieba库与好玩的词云的学习与应用实现
经过了一些学习与一些十分有意义的锻(zhe)炼(mo),我决定尝试一手新接触的python第三方库 ——jieba库! 这是一个极其优秀且强大的第三方库,可以对一个文本文件的所有内容进行识别,分词,甚 ...
- python语法_模块
方便调用的分组函数文件,一个py模块就是一个模块,模块分三类 python标准库 第三方模块 应程序自定义模块 模块的掉用: 可以把多个功能(函数)包含在一个模块文件里,调用时直接使用import 就 ...
- 【RL-TCPnet网络教程】第31章 Telnet远程登录基础知识
第31章 Telnet远程登录基础知识 本章节为大家讲解Telnet (Teletype Network) 的基础知识,方便后面章节的实战操作. (本章的知识点主要整理自网络) 31.1 ...
- JNI实战(一):JNI HelloWorld
使用最新Android Studio的Cmake,创建一个Native C++项目后,我们就可以看到JNI的Hello World的项目及示例代码了. JNI的项目代码,分为三层:Java层,C++层 ...
- SDL 开发实战(三):使用 SDL 绘制基本图形
在上文 SDL 开发实战(二):SDL 2.0 核心 API 解析 我们讲解了SDL最核心的API,并结合Hello World代码了解了SDL渲染画面的基本原理. 本文我们来讲一下,如何使用SDL的 ...
- 数据攻略●R语言自述
(注明:以下文章均在Linux操作系统下执行) 一.R语言简介 R语言是用于统计分析,图形表示和报告的编程语言和软件环境.R语言由Ross Ihaka和Robert Gentleman在新西兰奥克兰大 ...














