1. 程式人生 > >Java檔案讀寫操作(FileInputStream、FileReader、BufferedReader)

Java檔案讀寫操作(FileInputStream、FileReader、BufferedReader)

1.位元組流和字元流選擇
位元組流:位元組流讀取的時候,讀到一個位元組就返回一個位元組; 主要用於讀取圖片,MP3,AVI視訊檔案。
字元流:字元流使用了位元組流讀到一個或多個位元組,如讀取中文時,就會一次讀取2個位元組。只要是處理純文字資料,就要優先考慮使用字元流。

2.處理流和節點流
節點流:和作業系統緊密連線的流。該層的與檔案輸入輸出的操作都比較原始,沒有進過優化,功能比較單一。
(FileReader,FileWriter和FileInputStream,FileOutStream都是輸入節點流。)

處理流:該層流是對節點流的封裝,對節點流中進行優化,加入緩衝器,提供更加豐富的API等。我們一般都使用處理流,在建立處理流物件的時候一般都需要節點流物件作為其構造引數。
(BufferedInPutStream,BufferedOutPutStream和BufferedWriter,BufferedReader)


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class File_Operater {


    /*
     * 按位元組(byte)讀寫
     * 
     */
public static void FileInputStream_demo(String src,String dest) throws IOException{ FileInputStream in=new FileInputStream(src); File file=new File(dest); if(!file.exists()) file.createNewFile(); FileOutputStream out=new FileOutputStream(file); // read() 從此輸入流中讀取一個數據位元組。
// read(byte[] b) 從此輸入流中將最多 b.length 個位元組的資料讀入一個 byte 陣列中。 // int c; // while((c=in.read())!=-1){ // out.write(c); // } int c; byte buffer[]=new byte[1024]; while((c=in.read(buffer))!=-1){ for(int i=0;i<c;i++) out.write(buffer[i]); //out.write(buffer,0,c); //0到c的長度 } //不用out.write(buffer),可能存在buffer只用了一半,後一半輸出了未知東西 in.close(); out.close(); } /* * 按字元(char)讀寫 * */ public static void FileReader_demo(String src,String dest) throws IOException{ FileReader in = new FileReader(src); File file = new File(dest); if (!file.exists()) file.createNewFile(); FileWriter out= new FileWriter(file); char[] buffer = new char[3]; int c = 0; while ((c = in.read(buffer)) != -1) { out.write(buffer,0,c); } in.close(); out.close(); } /* * 按字元(char)讀寫,或者字串(String) * */ public static void BufferedReader_demo(String src,String dest) throws IOException{ File file_in = new File(src); BufferedReader in=new BufferedReader(new FileReader(file_in)); File file_out = new File(dest); if (!file_out.exists()) file_out.createNewFile(); BufferedWriter out=new BufferedWriter(new FileWriter(file_out)); //read() 讀取單個字元。 //readLine() 讀取一個文字行。 char[] buffer = new char[3]; int c = 0; while ((c = in.read(buffer)) != -1) { out.write(buffer,0,c); } // String read; // while ((read = in.readLine()) != null) { // out.write(read); // } in.close(); out.close(); } public static void main(String[] args) throws IOException { // TODO Auto-generated method stub String src="1.txt"; String out1="2.txt"; String out2="3.txt"; String out3="4.txt"; FileInputStream_demo(src,out1); FileReader_demo(src,out2); BufferedReader_demo(src,out3); } }