使用帶有緩沖的字符流讀寫數據


------------siwuxie095

   

   

   

   

   

   

工程名:TestRWBufferedCharStream

包名:com.siwuxie095.bufferedcharstream

類名:RWByBufferedCharStream.java

   

   

打開資源管理器,在工程 TestRWBufferedCharStream 文件夾下,放入

一個文本:java.txt

   

java.txt 的內容:

   

 

   

   

工程結構目錄如下:

   

   

   

   

   

   

代碼:

   

package com.siwuxie095.bufferedcharstream;

   

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

   

public class RWByBufferedCharStream {

   

/**

* 使用帶有緩沖的字符流實現文本文件的數據讀寫

*

* InputStreamReader 沒有讀取一行數據的方法

* OutputStreamWriter 沒有寫入一行數據后自動換行的方法

* 所以有一定的局限性

*

* 使用帶有緩沖的字符流就可以解決

*

* InputStreamReader BufferedReader API區別:

* InputStreamReader 4 read() 方法,BufferedReader 則多出一個 readLine()

* readLine() 每讀取到一個換行的時候,此函數就會結束,並將這一行數據返回

*

* OutputStreamWriter BufferedWriter API區別:

* OutputStreamWriter 5 write() 方法,BufferedWriter 同樣是這 5 個方法

* BufferedWriter 的優勢在於其寫出的操作是帶有緩沖的,在 BufferedWriter 內部

* 有一個自帶的緩沖區,當文件寫出的時候,會先寫入到這個緩沖區,當緩沖區被寫滿

* 之后才會向硬盤執行一次真正的寫出操作,這樣就大大減少了硬盤的使用量,延長了

* 硬盤的使用壽命,整體的寫出時間也會變短,增加了寫入效率

*

*

* 在使用緩沖流寫出數據時要注意一點:

* 到文件末尾時如果寫出的數據還沒有填滿緩沖區,緩沖區里的內容有些時候是不會被

* 寫入到文件里的。導致文件內容丟失 不完整,所以在緩沖流 close() 之前,要調

* 用輸出流的 flush()方法,將當前的緩沖區里的內容強制輸出,不留遺漏,保證文件

* 內容的完整

*

* @param args

*/

public static void main(String[] args) {

   

try {

   

// 先創建一個文件對象

File file = new File("java.txt");

// 再創建一個文件輸入流(字節流),傳入 file

FileInputStream fis = new FileInputStream(file);

// 使用 InputStreamReader 將字節流轉化為字符流

// 傳入 fis 並指定字符集:UTF-8

InputStreamReader isr = new InputStreamReader(fis, "UTF-8");

// 繼續包裝成帶緩沖的字符流,傳入Reader對象:isr

BufferedReader br = new BufferedReader(isr);

   

 

// 文件的輸出流會自動創建文件 java_buff.txt,不需要手動創建

FileOutputStream fos = new FileOutputStream("java_buff.txt");

// 在對同一個文件進行讀寫 對同一段數據操作時,其編碼設定一定要一致

OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");

BufferedWriter bw = new BufferedWriter(osw);

 

 

// 打印流,其方法和 BufferedWriter 相似,傳入一個Writer對象:osw

// PrintWriter 還可以設置自動執行 flush 操作,不用手動去 pw.flush()

//PrintWriter pw=new PrintWriter(osw,true);

PrintWriter pw=new PrintWriter(osw);

   

 

String input;

   

// 如果 readLine() 的返回值是 null,則讀取到了文件末尾

while ((input = br.readLine()) != null) {

System.out.println(input);

// Stringinput 寫入到文件 java_buff.txt,但是會丟失所有的換行符

// 這是因為使用 BufferedReader readLine()方法來讀取一行數據時,

// 雖然讀取的是一行數據,返回值中卻並不包含換行符,所以在寫入文件

// 時就只能寫入每一行的真實內容,而沒有換行符,最后就只有一行了

// 可以手動加入一個換行符

bw.write(input + "\n");

   

// 或者 使用另一個APIPrintWriter,來保留換行符

// PrintWriter write() 方法和BufferedWriterOutputStreamWriter一樣

// 除此之外,PrintWriter 還提供了特殊的寫出方法,即 print() println()

// 特別是 printline 寫出數據時會在當前字符串末尾添加一個換行符

//pw.println(input);

}

 

//關閉緩沖流之前,執行輸出流的 flush 操作

bw.flush();

//pw.flush();

 

 

// 讀寫完畢,關閉流

br.close();

isr.close();

fis.close();

pw.close();

bw.close();

osw.close();

fos.close();

   

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

   

}

   

   

運行一覽:

   

   

   

   

java_buff.txt 的內容:

   

   

   

   

運行后,工程結構目錄一覽:

   

   

   

   

   

【made by siwuxie095】


免責聲明!

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



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