Java中PrintWriter、BufferedWriter以及BufferredReader基本使用詳解
阿新 • • 發佈:2019-01-02
PrintWriter的使用
PrintWriter:是具有自動行重新整理的緩衝字元輸出流,這是一個高階流。所謂的自動行重新整理,意思就是說:在建構函式中指定
autoFlush
的值為true
時,則println()
、printf()
或format()
方法將自動重新整理輸出緩衝區(自動呼叫flush()
方法),但是,自動行重新整理無疑會增加寫出次數而降低寫出效率。
建構函式
//使用指定檔案建立不具有自動行重新整理的新 PrintWriter
public PrintWriter(File file);
//建立具有指定檔案和字符集且不帶自動刷行新的新 PrintWriter
public PrintWriter(File file,String csn);
//根據現有的 OutputStream 建立不帶自動行重新整理的新 PrintWriter
public PrintWriter(OutputStream out);
//通過現有的 OutputStream 建立新的 PrintWriter(具有自動行重新整理)
public PrintWriter(OutputStream out,boolean autoFlush);
//建立具有指定檔名稱且不帶自動行重新整理的新 PrintWriter
public PrintWriter(String fileName);
//建立具有指定檔名稱和字符集且不帶自動行重新整理的新 PrintWriter
public PrintWriter(String fileName,String csn);
//建立新 PrintWriter(具有自動行重新整理)
public PrintWriter(Writer out,boolean autoFlush);
從PrintWeiter的構造方法中我們就可以知道,該高階流很靈活,接下來我們會介紹BufferedWriter/BufferedReader這一對字元緩衝流,但是,由於BufferedWriter沒有PrintWriter使用靈活,所以在實際的操作中,我們往往會使用PrinterWriter/BufferedReader這種組合。
常用的方法
//列印boolean值
public void print(boolean b);
//列印 boolean 值,然後終止該行
public void println(boolean x);
//列印字元
public void print(char c);
//列印字元,然後終止該行
public void println(char x);
//列印字元陣列
public void print(char[] s);
//列印字元陣列,然後終止該行
public void println(char[] x);
//列印 double 精度浮點數
public void print(double d);
//列印 double 精度浮點數,然後終止該行
public void println(double x);
//列印一個浮點數
public void print(float f);
//列印浮點數,然後終止該行
public void println(float x);
//列印整數
public void print(int i);
//列印整數,然後終止該行
public void println(int x);
//列印 long 整數
public void print(long l);
//列印 long 整數,然後終止該行
public void println(long x);
//列印物件
public void print(Object obj);
//列印 Object,然後終止該行
public void println(Object x);
//列印字串。如果引數為 null,則列印字串 "null"
public void print(String s);
//列印 String,然後終止該行
public void println(String x);
//通過寫入行分隔符字串終止當前行
public void println();
//使用指定格式字串和引數將一個格式化字串寫入此 writer 中。如果啟用自動重新整理,則呼叫此方法將重新整理輸出緩衝區
public PrintWriter format(Locale l,String format,Object... args);
//使用指定格式字串和引數將一個格式化字串寫入此 writer 中。如果啟用自動重新整理,則呼叫此方法將重新整理輸出緩衝區
public PrintWriter format(String format,Object... args);
//將指定字元新增到此 writer
public PrintWriter append(char c);
//將指定的字元序列新增到此 writer
public PrintWriter append(CharSequence csq);
//將指定字元序列的子序列新增到此 writer
public PrintWriter append(CharSequence csq,int start,int end);
//寫入字元陣列
public void write(char[] buf);
//寫入字元陣列的某一部分
public void write(char[] buf,int off,int len);
//寫入單個字元
public void write(int c);
//寫入字串
public void write(String s);
//寫入字串的某一部分
public void write(String s,int off,int len);
將字串寫到檔案中
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
/**
* PrintWriter:是具有自動行重新整理的緩衝字元輸出流(高階流)
* @author Administrator
*
*/
public class PWDemo01 {
public static void main(String[] args) {
try {
//開啟檔案
FileOutputStream fos=new FileOutputStream("pw.txt");
//設定編碼集
OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
/**
* 建立具有自動重新整理的PrinterWriter後,每當我們使用println()/print()
* 方法寫出字串後,都會自動呼叫flush()方法
* 但是,這個無疑會增加寫出次數而降低寫出效率
*/
//寫出資料
PrintWriter pw=new PrintWriter(osw, true);
pw.println("字元緩衝");
pw.append("測試資料");
pw.write("哈哈哈");
pw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
BufferedWriter的使用
BufferedWriter:字元緩衝輸出流(高階流),將文字寫入字元輸出流,緩衝各個字元,從而提供單個字元、陣列和字串的高效寫入。 可以指定緩衝區的大小,或者接受預設的大小。在大多數情況下,預設值就足夠大了。
構造方法
//建立一個使用預設大小輸出緩衝區的緩衝字元輸出流
public BufferedWriter(Writer out);
//建立一個使用給定大小輸出緩衝區的新緩衝字元輸出流
public BufferedWriter(Writer out,int sz);
常用的方法
//寫入字元陣列的某一部分
public void write(char[] cbuf,int off,int len);
//寫入單個字元
public void write(int c);
//寫入字串的某一部分
public void write(String s,int off,int len);
//寫入一個行分隔符
public void newLine();
將字串寫入到檔案中
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
/**
* BufferedWriter:字元緩衝輸出流(高階流)
* @author 作者 E-mail:[email protected]
* @date 建立時間:2016年10月9日 上午11:10:21
* @version 1.0
* @parameter
* @since
* @return
*/
public class BWDemo01 {
public static void main(String[] args) {
try {
//開啟檔案
FileOutputStream fos=new FileOutputStream("pw.txt");
//設定編碼集
OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
//將字元輸出流包裝為字元緩衝輸出流
BufferedWriter bw=new BufferedWriter(osw);
bw.write("BW測試文字");
bw.append("BWBWBWBWBW");
bw.flush();
bw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
從BufferedWriter的建構函式和常用的方法中可以看出來,BufferedWriter的使用相比較PrinterWriter來講就比較簡單了,所以在應用中我們一般不使用BufferedWriter而是使用PrinterWriter,大家知道BufferedWriter即可。
BufferedReader的使用
BufferedReader:緩衝字元輸入流,高階流。從字元輸入流中讀取文字,緩衝各個字元,從而實現字元、陣列和行的高效讀取。可以以行為單位讀取字串。
建構函式
//建立一個使用預設大小(8192)輸入緩衝區的緩衝字元輸入流
public BufferedReader(Reader in);
//建立一個使用指定大小輸入緩衝區的緩衝字元輸入流
public BufferedReader(Reader in,int sz);
常用的方法
//讀取單個字元
public int read();
//讀入字元陣列中的某一部分
public int read(char[] cbuf,int off,int len);
//讀取一個文字行
public String readLine();
//跳過字元
public long skip(long n);
從檔案中讀取文字資料
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
/**
* BufferedReader:緩衝字元輸入流,高階流
* 從字元輸入流中讀取文字,緩衝各個字元,從而實現字元、陣列和行的高效讀取。
* 可以以行為單位讀取字串
* @author Administrator
*
*/
public class BRDemo01 {
public static void main(String[] args) {
try {
/**
* 逐個字元的讀取
*/
FileInputStream fis=new FileInputStream("pw.txt");
InputStreamReader isr=new InputStreamReader(fis, "UTF-8");
BufferedReader br=new BufferedReader(isr);
int size=0;
while((size=br.read())!=-1){
char content=(char)size;
System.out.println(content);
}
/**
* 整行讀取
*/
FileInputStream fis1=new FileInputStream("pw.txt");
InputStreamReader isr1=new InputStreamReader(fis1, "UTF-8");
BufferedReader br1=new BufferedReader(isr1);
String isNull=null;
/**
* public String readLine()
* 該方法的返回值如果為null,則說明已經讀到檔案的末尾了
*/
while((isNull=br1.readLine())!=null){
System.out.println(isNull);
}
br.close();
br1.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用PrintWriter/BufferedReader實現檔案的複製
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
public class SummaryPWAndBR {
public static void main(String[] args) {
/**
* 使用字元緩衝輸入流和字元緩衝輸出流實現檔案的複製
* 1.開啟檔案
* 2.設定字符集
* 3.進行讀寫操作
* 4.關閉流
*/
try {
long begin=System.currentTimeMillis();
//開啟原始檔
FileInputStream fis=new FileInputStream("pwSrc.txt");
//設定字符集
InputStreamReader isr=new InputStreamReader(fis, "UTF-8");
//從原始檔讀入資料
BufferedReader br=new BufferedReader(isr);
//開啟目標檔案
FileOutputStream fos=new FileOutputStream("pwDest.txt");
//設定字符集
OutputStreamWriter osw=new OutputStreamWriter(fos, "UTF-8");
//寫入資料到目標檔案
PrintWriter pw=new PrintWriter(osw, true);
int size=0;
char[] buffer=new char[10240];
while((size=br.read(buffer, 0, buffer.length))!=-1){
pw.write(buffer, 0, size);
}
br.close();
pw.close();
long end=System.currentTimeMillis();
System.out.println("使用字元緩衝輸入流實現檔案的複製完畢!耗時:"+(end-begin)+"毫秒");
} catch (Exception e) {
e.printStackTrace();
}
}
}
執行結果:
以上內容只代表我個人的觀點,有什麼錯誤的地方請各路大神指正!轉載請註明出處!謝謝!
每天進步一點點!