功能簡介
PrintWriter 向文本輸出流打印對象的格式化表示形式
他與PrintStream的邏輯上功能目的是相同的--他們都想做同一件事情--更便捷的格式化打印輸出
| PrintWriter實現了PrintStream 中的所有 print 方法,除了那些用於寫入原始字節的方法,對於那些字節,程序應該使用未編碼的字節流進行寫入 |
|
PrintStream會在換行符時自動調用自動刷新
PrintWriter在這一點上與PrintWriter不同,
只有在調用 println、printf 或 format 的其中一個方法時才可能完成此操作
|
| 類似,PrintStream 此類中的方法不會拋出 I/O 異常,可以通過 checkError() 檢查是否出現錯誤 |
| PrintWriter也是裝飾器模式 只不過看起來沒那么典型而已 他直接繼承Writer 省略了抽象裝飾器角色Decorator PrintWriter 既充當了Decorator也是一個ConcreteDecorator 它內部包含了一個Writer out |
|
構造方法
他內部有一個Writer out ,而且剛才我們已經說了他是裝飾器模式
所以他必然會需要一個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 編碼如果不設置,那么是系統默認 |
Write方法
print(xxx) /println(xxx)
| 可以看得出來 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 構造方法很多,提供出來的方法也很多,看起來讓人眼花繚亂
其實他就是一個裝飾工具類,底層邏輯也很簡單
既然是工具性質的
1. 自然需要有足夠便捷的構造形式,你看那么多構造方法,最終不過也就是一種形式的構造方法
2. 自然有能夠有多變的輸出形式才能夠說是便捷的輸出打印嘛
對於Writer家族的一些基本操作,基本上是沿用了Write
所謂的增加的便捷亮點各種print和println
也就只是使用Writer本身的write方法打印輸出他們的字符 形式
轉換為字符的規則為:
| 基本數據類型和Object 會使用String.valueOf進行轉換 |
| 字符 字符數組 String本身就是字符/字符串的形式 |
另外的一個亮點是printf 同PrintStream中的是一樣的,想要弄清楚重點在於弄清楚 Formatter了
上面說了,他既然是裝飾工具流,所以說他必然要依賴於其他的輸出流
PrintWriter就是依賴Writer,他就是來給這個Writer增加更便捷的打印輸出功能的
既然着重點在於格式化輸出數據,那么他的關注點自然在於數據的形式,而不是在於怎么寫,所以write方法都幾乎不動使用的還是原來的
然后在實際的調用各種print方法的時候,在對方法的入參進行轉換,換成了字符的形式而已




















