File I/O ( 檔案輸入輸出 )
description
Transcript of File I/O ( 檔案輸入輸出 )
![Page 1: File I/O ( 檔案輸入輸出 )](https://reader038.fdocument.pub/reader038/viewer/2022102801/56813c44550346895da5c021/html5/thumbnails/1.jpg)
1
File I/O( 檔案輸入輸出 )
![Page 2: File I/O ( 檔案輸入輸出 )](https://reader038.fdocument.pub/reader038/viewer/2022102801/56813c44550346895da5c021/html5/thumbnails/2.jpg)
2
綱要• 串流 (Stream)
• 字元與位元處理• 語法格式介紹• 由鍵盤讀取資料• BufferedReader 與 BufferedWriter 的
methods
• 程式範例
![Page 3: File I/O ( 檔案輸入輸出 )](https://reader038.fdocument.pub/reader038/viewer/2022102801/56813c44550346895da5c021/html5/thumbnails/3.jpg)
3
檔案輸入輸出• 串流 (Stream)• Java 是以「串流 (Stream) 」的方式來處理輸入與輸
出。• 「串流」是一種抽象觀念,從鍵盤輸入資料、將處理
結果寫入檔案、以及讀取檔案的內容等動作皆視為串流的處理。
• 串流裡的資料是由字元 (characters)= 純文字檔 (text file) 與位元 (bit)= 二進位檔 (binary file) 所組成。
• 串流分為「輸入串流 (input stream) 」與「輸出串流(output stream) 」兩種。
![Page 4: File I/O ( 檔案輸入輸出 )](https://reader038.fdocument.pub/reader038/viewer/2022102801/56813c44550346895da5c021/html5/thumbnails/4.jpg)
4
檔案輸入輸出• 字元:
– 讀檔: FileReader– 寫檔: FileWriter– 使用緩衝區來讀檔: BufferedReader– 將資料寫入緩衝區: BufferedWriter
• 位元:– 讀檔: FileInputStream– 寫檔: FileOutputStream
• 呼叫:檔案處理所使用的須載入呼叫 import java.io.*;
![Page 5: File I/O ( 檔案輸入輸出 )](https://reader038.fdocument.pub/reader038/viewer/2022102801/56813c44550346895da5c021/html5/thumbnails/5.jpg)
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 ( 檔案輸入輸出 )](https://reader038.fdocument.pub/reader038/viewer/2022102801/56813c44550346895da5c021/html5/thumbnails/6.jpg)
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 ( 檔案輸入輸出 )](https://reader038.fdocument.pub/reader038/viewer/2022102801/56813c44550346895da5c021/html5/thumbnails/7.jpg)
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 ( 檔案輸入輸出 )](https://reader038.fdocument.pub/reader038/viewer/2022102801/56813c44550346895da5c021/html5/thumbnails/8.jpg)
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 ( 檔案輸入輸出 )](https://reader038.fdocument.pub/reader038/viewer/2022102801/56813c44550346895da5c021/html5/thumbnails/9.jpg)
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 ( 檔案輸入輸出 )](https://reader038.fdocument.pub/reader038/viewer/2022102801/56813c44550346895da5c021/html5/thumbnails/10.jpg)
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 ( 檔案輸入輸出 )](https://reader038.fdocument.pub/reader038/viewer/2022102801/56813c44550346895da5c021/html5/thumbnails/11.jpg)
檔案輸入輸出• 讀取鍵盤輸入資料
– 資料來源
– 讀取鍵盤資料
– 放入暫存區
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 ( 檔案輸入輸出 )](https://reader038.fdocument.pub/reader038/viewer/2022102801/56813c44550346895da5c021/html5/thumbnails/12.jpg)
檔案輸入輸出• 讀取鍵盤輸入資料
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 ( 檔案輸入輸出 )](https://reader038.fdocument.pub/reader038/viewer/2022102801/56813c44550346895da5c021/html5/thumbnails/13.jpg)
檔案輸入輸出 -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 ( 檔案輸入輸出 )](https://reader038.fdocument.pub/reader038/viewer/2022102801/56813c44550346895da5c021/html5/thumbnails/14.jpg)
檔案輸入輸出
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 ( 檔案輸入輸出 )](https://reader038.fdocument.pub/reader038/viewer/2022102801/56813c44550346895da5c021/html5/thumbnails/15.jpg)
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 ( 檔案輸入輸出 )](https://reader038.fdocument.pub/reader038/viewer/2022102801/56813c44550346895da5c021/html5/thumbnails/16.jpg)
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(); // 關閉檔案 }}