java.io.PrintWriter
具有自動行刷新的緩沖字符輸出流,特點是可以按行寫出字符串,並且可以自動行刷新。
java.io.BufferedWriter是緩沖字符輸出流,內部有緩沖區可以進行塊寫操作提供效率,
而PrintWriter就是通過連接它實現的緩沖功能(PW的很多構造方法內部自動連接它)。
PW支持兩個直接對文件寫操作的構造方法:
* PrintWriter(File f)傳文件名
* PrintWriter(String s)傳路徑
以上兩種方法都支持一個重載,就是再傳入一個參數
* 允許我們制定寫出字符時的字符集。
* PrintWriter給人一種可以直接對文件進行操作的假象
* PW是一個高級流
* 實際上PW包裝了字節流、字符流和字符緩沖流。
* PW負責自動行刷新
* bw負責提高效率
* osw負責讀字符
* fos負責寫字節
* 最后PW能夠按行很快地把一個字符串變成字節寫在文件中
代碼展示如下所示:
import java.io.IOException; import java.io.PrintWriter; /** * java.io.PrintWriter * 具有自動行 * @author 小明 * */ public class PWDemo { public static void main(String[] args) throws IOException { /** * PW支持兩個直接對文件寫操作的構造方法: * PrintWriter(File f)傳文件名 * PrintWriter(String s)傳路徑 * PrintWriter給人一種可以直接對文件進行操作的假象 * PW是一個高級流 * 實際上PW包裝了字節流、字符流和字符緩沖流。 * PW負責自動行刷新 * bw負責提高效率 * osw負責讀字符 * fos負責寫字節 * 最后PW能夠按行很快地把一個字符串變成字節寫在文件中 */ PrintWriter pw = new PrintWriter("pw.txt"); pw.println("飛雪連天射白鹿"); pw.println("金庸小說我都愛看"); System.out.println("寫出完畢!"); pw.close(); } }
import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; public class PWDemo2 { public static void main(String[] args) throws IOException { /** * 使用流連接形式向文件中寫出字符串 */ // FileOutputStream fos = new FileOutputStream("pw2.txt"); // // OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8"); // // BufferedWriter bw = new BufferedWriter(osw); // // PrintWriter pw = new PrintWriter(bw); PrintWriter pw = new PrintWriter( new BufferedWriter( new OutputStreamWriter( new FileOutputStream("pw2.txt") , "UTF-8") ) ); pw.println("你好"); pw.println("我不好"); pw.close(); } }
緩沖字符流中所有構造方法中第一個參數都是Reader或Writer對象。
代碼展示如下所示:
PrintWriter創建時如果有參數true時,會有行刷新。PrintWriter調用println()方法有行刷新。
當創建PW時第一個參數為一個流時,
* 那么久可以再傳入一個boolean值類型的參數,
* 若該值為true,那么當前PW久具有自動行刷新的功能,
* 即:每當使用println方法寫出一行字符串后就會自動調用flush
* 注:使用自動行刷新可以提高寫出數據的即時性,
* 但是由於會提高寫出次數,必然會導致寫效率降低。
package io; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.Scanner; /** * 完成簡易記事本功能 * 程序啟動后要求輸入文件名,然后對該文件寫操作。 * 之后輸入的每一行字符串都按行寫入到該文件中。 * 當輸入“exit"是程序退出。 * * 使用PW完成該功能,並且自行使用流連接完成。 * * @author 小明 * */ public class Note { public static void main(String[] args) throws IOException, FileNotFoundException{ Scanner reader = new Scanner(System.in); System.out.println("請輸入文件名:"); String filename = reader.nextLine(); PrintWriter pw = new PrintWriter( new BufferedWriter( new OutputStreamWriter( new FileOutputStream(filename),"UTF-8" ) ),true ); System.out.println("請開始輸入內容"); while(true) { String line = reader.nextLine(); /** * 當創建PW時第一個參數為一個流時, * 那么久可以再傳入一個boolean值類型的參數, * 若該值為true,那么當前PW久具有自動行刷新的功能, * 即:每當使用println方法寫出一行字符串后就會自動調用flush * 注:使用自動行刷新可以提高寫出數據的即時性, * 但是由於會提高寫出次數,必然會導致寫效率降低。 */ if("exit".equals(line)) { break; } //pw.write(line); pw.println(line); //pw.flush(); } pw.close(); System.out.println("謝謝輸入"); } }