File I/O ( 檔案輸入輸出 )

16
1 File I/O ( 檔檔檔檔檔檔 )

description

File I/O ( 檔案輸入輸出 ). 綱要. 串流 (Stream) 字元與位元處理 語法格式介紹 由鍵盤讀取資料 BufferedReader 與 BufferedWriter 的 methods 程式範例. 檔案輸入輸出. 串流 (Stream) Java 是以「串流 (Stream) 」的方式來處理輸入與輸出。 「串流」是一種抽象觀念,從鍵盤輸入資料、將處理結果寫入檔案、以及讀取檔案的內容等動作皆視為串流的處理。 - PowerPoint PPT Presentation

Transcript of File I/O ( 檔案輸入輸出 )

Page 1: File I/O ( 檔案輸入輸出 )

1

File I/O( 檔案輸入輸出 )

Page 2: File I/O ( 檔案輸入輸出 )

2

綱要• 串流 (Stream)

• 字元與位元處理• 語法格式介紹• 由鍵盤讀取資料• BufferedReader 與 BufferedWriter 的

methods

• 程式範例

Page 3: File I/O ( 檔案輸入輸出 )

3

檔案輸入輸出• 串流 (Stream)• Java 是以「串流 (Stream) 」的方式來處理輸入與輸

出。• 「串流」是一種抽象觀念,從鍵盤輸入資料、將處理

結果寫入檔案、以及讀取檔案的內容等動作皆視為串流的處理。

• 串流裡的資料是由字元 (characters)= 純文字檔 (text file) 與位元 (bit)= 二進位檔 (binary file) 所組成。

• 串流分為「輸入串流 (input stream) 」與「輸出串流(output stream) 」兩種。

Page 4: File I/O ( 檔案輸入輸出 )

4

檔案輸入輸出• 字元:

– 讀檔: FileReader– 寫檔: FileWriter– 使用緩衝區來讀檔: BufferedReader– 將資料寫入緩衝區: BufferedWriter

• 位元:– 讀檔: FileInputStream– 寫檔: FileOutputStream

• 呼叫:檔案處理所使用的須載入呼叫 import java.io.*;

Page 5: File I/O ( 檔案輸入輸出 )

5

檔案輸入輸出• 字元:

– 讀檔

– 寫檔

FileReader(String name) // 依檔案名稱建立一個可供讀取字元的輸入串流物件FileReader(String name) // 依檔案名稱建立一個可供讀取字元的輸入串流物件

FileWriter(String filename)// 依檔案名稱建立一個可供寫入字元資料的串流物件,原先的檔案會被覆蓋。FileWriter(String filename, Boolean a)// 同上,但如果 a 設為 true ,則會將資料附加在原先的資料後面。

FileWriter(String filename)// 依檔案名稱建立一個可供寫入字元資料的串流物件,原先的檔案會被覆蓋。FileWriter(String filename, Boolean a)// 同上,但如果 a 設為 true ,則會將資料附加在原先的資料後面。

Page 6: File I/O ( 檔案輸入輸出 )

6

檔案輸入輸出• 字元:

– 使用緩衝區來讀檔

BufferedReader(Reader in) // 建立緩衝區字元讀取串流BufferedReader(Reader in, int size) // 建立緩衝區字元讀取串流,並設定緩衝區大小

Ex: FileReader dataFile=new FileReader(“d:\\number.txt”); BufferedReader bfr=new BufferedReader(dataFile);

BufferedReader(Reader in) // 建立緩衝區字元讀取串流BufferedReader(Reader in, int size) // 建立緩衝區字元讀取串流,並設定緩衝區大小

Ex: FileReader dataFile=new FileReader(“d:\\number.txt”); BufferedReader bfr=new BufferedReader(dataFile);

Page 7: File I/O ( 檔案輸入輸出 )

7

檔案輸入輸出• 字元:

– 將資料寫入緩衝區

BufferedWriter(Writer out) // 建立緩衝區字元寫入串流BufferedWriter(Writer out, int size) // 建立緩衝區字元寫入串流,並設定緩衝區大小

Ex: FileWriter dataFile=new FileWriter (“d:\\number.txt”); BufferWriter bfw=new BufferedWriter (dataFile);

BufferedWriter(Writer out) // 建立緩衝區字元寫入串流BufferedWriter(Writer out, int size) // 建立緩衝區字元寫入串流,並設定緩衝區大小

Ex: FileWriter dataFile=new FileWriter (“d:\\number.txt”); BufferWriter bfw=new BufferedWriter (dataFile);

Page 8: File I/O ( 檔案輸入輸出 )

8

檔案輸入輸出• 位元:

– 讀檔

– 寫檔

FileInputStream(String name) // 根據所給予的字串建立 FileInputStream 類別的FileInputStream(String name) // 根據所給予的字串建立 FileInputStream 類別的

FileOutputStream(String name) // 根據檔案名稱建立一個可供寫入資料的輸出串流物件,原先的檔案會被覆蓋FileOutputStream(String name, Boolean a) // 同上,但如果 a 設為 true ,則會將資料附加在原先的資料後面

FileOutputStream(String name) // 根據檔案名稱建立一個可供寫入資料的輸出串流物件,原先的檔案會被覆蓋FileOutputStream(String name, Boolean a) // 同上,但如果 a 設為 true ,則會將資料附加在原先的資料後面

Page 9: File I/O ( 檔案輸入輸出 )

9

檔案輸入輸出• 準備好欲讀取的檔案( rainFile.in ),並建

立 FileReader 物件。• 根據 FileReader 物件建立 BufferedReader物件。

• FileReader 是讀取檔案的字元流;BufferedReader 是透過 buffer 讀取的字元串流,讓資料暫時儲存到緩衝區。

inFile=new BufferedReader(new FileReader("rainFile.in"));inFile=new BufferedReader(new FileReader("rainFile.in"));

Page 10: File I/O ( 檔案輸入輸出 )

10

檔案輸入輸出• 準備好寫出的檔案( data.out ),並建立

FileWriter 物件。• 根據 FileWriter 物件建立 BufferedWriter 物件。

• FileWriter 是寫入檔案的字元流;BufferedWriter 是透過 buffer 寫入的字元串流,讓資料暫時寫至到緩衝區。outFile=new BufferedWriter (new FileWriter("data.out"));outFile=new BufferedWriter (new FileWriter("data.out"));

Page 11: File I/O ( 檔案輸入輸出 )

檔案輸入輸出• 讀取鍵盤輸入資料

– 資料來源

– 讀取鍵盤資料

– 放入暫存區

11

System.inSystem.in

InputStreamReader(System.in)InputStreamReader(System.in)

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

Page 12: File I/O ( 檔案輸入輸出 )

檔案輸入輸出• 讀取鍵盤輸入資料

12

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()); // 讀入鍵盤資料並印出 }}

Page 13: File I/O ( 檔案輸入輸出 )

檔案輸入輸出 -Method

13

• BufferedReader 的方法

method 主要功能int read() 讀取單一字元int read

(char[] cbuf, int off, int len)讀取字元陣列(off 表示陣列索引值, len 表示讀取位元數 )

long skip(long n) 跳過 n 個字元不讀取String readLine() 讀取一行字串

Page 14: File I/O ( 檔案輸入輸出 )

檔案輸入輸出

14

• BufferedWriter 的方法

• 關閉檔案: 檔案 (物件 )名稱 .close();

method 主要功能void flush() 寫入緩衝區內的字元到檔案裡

void newLine() 寫入換行字元void write(char c) 寫入單一字元

void write(char[] cbuf, int off, int len)

寫入字元陣列(off 表示陣列索引值, len 表示讀取位元數 )

Page 15: File I/O ( 檔案輸入輸出 )

15

檔案輸入輸出 - 程式範例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(); // 關閉檔案 }}

Page 16: File I/O ( 檔案輸入輸出 )

16

檔案輸入輸出 - 程式範例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(); // 關閉檔案 }}