PrintWriter的使用


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("謝謝輸入");
}

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM