[二十四]JavaIO之PrintWriter
2018-09-18 06:36:09来源:博客园 阅读 ()
功能简介
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本身就是字符/字符串的形式 |
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 使用PrintWriter完成写操作 ,实现简易记事本工具 2019-12-13
- JavaIO流总结 2019-10-25
- java中讲讲PrintWriter的用法,举例? 2019-09-23
- javaIO——概述 2019-08-16
- Java开发笔记(一百二十四)AWT绘图操作 2019-08-16
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash