160 likes | 307 Views
File I/O ( 檔案輸入輸出 ). 綱要. 串流 (Stream) 字元與位元處理 語法格式介紹 由鍵盤讀取資料 BufferedReader 與 BufferedWriter 的 methods 程式範例. 檔案輸入輸出. 串流 (Stream) Java 是以「串流 (Stream) 」的方式來處理輸入與輸出。 「串流」是一種抽象觀念,從鍵盤輸入資料、將處理結果寫入檔案、以及讀取檔案的內容等動作皆視為串流的處理。
E N D
綱要 • 串流(Stream) • 字元與位元處理 • 語法格式介紹 • 由鍵盤讀取資料 • BufferedReader與BufferedWriter的methods • 程式範例
檔案輸入輸出 • 串流(Stream) • Java是以「串流(Stream)」的方式來處理輸入與輸出。 • 「串流」是一種抽象觀念,從鍵盤輸入資料、將處理結果寫入檔案、以及讀取檔案的內容等動作皆視為串流的處理。 • 串流裡的資料是由字元(characters)=純文字檔(text file)與位元(bit)=二進位檔(binary file)所組成。 • 串流分為「輸入串流(input stream)」與「輸出串流(output stream)」兩種。
檔案輸入輸出 • 字元: • 讀檔:FileReader • 寫檔:FileWriter • 使用緩衝區來讀檔:BufferedReader • 將資料寫入緩衝區:BufferedWriter • 位元: • 讀檔:FileInputStream • 寫檔:FileOutputStream • 呼叫:檔案處理所使用的須載入呼叫 import java.io.*;
檔案輸入輸出 • 字元: • 讀檔 • 寫檔 FileReader(String name)//依檔案名稱建立一個可供讀取字元的輸入串流物件 FileWriter(String filename) //依檔案名稱建立一個可供寫入字元資料的串流物件,原先的檔案會被覆蓋。 FileWriter(String filename, Boolean a) //同上,但如果a設為true,則會將資料附加在原先的資料後面。
檔案輸入輸出 • 字元: • 使用緩衝區來讀檔 BufferedReader(Reader in) //建立緩衝區字元讀取串流 BufferedReader(Reader in, int size) //建立緩衝區字元讀取串流,並設定緩衝區大小 Ex: FileReader dataFile=new FileReader(“d:\\number.txt”); BufferedReader bfr=new BufferedReader(dataFile);
檔案輸入輸出 • 字元: • 將資料寫入緩衝區 BufferedWriter(Writer out) //建立緩衝區字元寫入串流 BufferedWriter(Writer out, int size) //建立緩衝區字元寫入串流,並設定緩衝區大小 Ex: FileWriter dataFile=new FileWriter (“d:\\number.txt”); BufferWriter bfw=new BufferedWriter (dataFile);
檔案輸入輸出 • 位元: • 讀檔 • 寫檔 FileInputStream(String name) //根據所給予的字串建立FileInputStream類別的 FileOutputStream(String name) //根據檔案名稱建立一個可供寫入資料的輸出串流物件,原先的檔案會被覆蓋 FileOutputStream(String name, Boolean a) //同上,但如果a設為true,則會將資料附加在原先的資料後面
檔案輸入輸出 • 準備好欲讀取的檔案(rainFile.in),並建立FileReader物件。 • 根據FileReader物件建立BufferedReader物件。 • FileReader是讀取檔案的字元流;BufferedReader是透過buffer讀取的字元串流,讓資料暫時儲存到緩衝區。 inFile=new BufferedReader(new FileReader("rainFile.in"));
檔案輸入輸出 • 準備好寫出的檔案(data.out),並建立FileWriter物件。 • 根據FileWriter物件建立BufferedWriter物件。 • FileWriter是寫入檔案的字元流;BufferedWriter是透過buffer寫入的字元串流,讓資料暫時寫至到緩衝區。 outFile=new BufferedWriter (new FileWriter("data.out"));
檔案輸入輸出 • 讀取鍵盤輸入資料 • 資料來源 • 讀取鍵盤資料 • 放入暫存區 System.in InputStreamReader(System.in) BufferedReaderbr = new BufferedReader(new InputStreamReader(System.in));
檔案輸入輸出 • 讀取鍵盤輸入資料 import java.io.*; class test123 { public static void main(String args[]) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println(br.readLine()); //讀入鍵盤資料並印出 } }
檔案輸入輸出-Method • BufferedReader的方法
檔案輸入輸出 • BufferedWriter的方法 • 關閉檔案: 檔案(物件)名稱.close();
檔案輸入輸出-程式範例 import java.io.*; public class app14_4 { public static void main(String args[]) throws IOException { FileWriter fw=new FileWriter("c:\\random.txt"); BufferedWriter bfw=new BufferedWriter(fw); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); for(int i=1;i<=5;i++) { bfw.write(Double.toString(Math.random())); // 寫入亂數到緩衝區 bfw.newLine(); // 寫入換行符號 } bfw.write(br.readLine()); //由鍵盤輸入資料,並寫入檔案中 bfw.flush(); // 將緩衝區內的資料寫到檔案裡 fw.close(); // 關閉檔案 } }
檔案輸入輸出-程式範例 import java.io.*; public class app14_5 { public static void main(String args[]) throws IOException { FileReader fr=new FileReader("c:\\random.txt"); BufferedReader bfr=new BufferedReader(fr); char str[]=new char[100]; //宣告size 100的字元陣列 System.out.println(bfr.readLine()); //讀入一行資料 bfr.skip(3); //跳過3個字元 bfr.read(str,5,10); //讀入10個字,放入str的陣列第6格以後的位子 System.out.println(str); //印出str字串 fr.close(); // 關閉檔案 } }