Download presentation
Presentation is loading. Please wait.
1
第9章 例外與檔案處理 9-4 檔案與資料夾處理 9-5 Java的輸入/輸出串流 9-6 檔案的讀取與寫入
2
9-4 檔案與資料夾處理 9-4-1 顯示檔案和資料夾清單 9-4-2 顯示檔案資訊 9-4-3 更改檔名與刪除檔案 9-4-4 建立資料夾
3
9-4 檔案與資料夾處理 在進入基本輸出入和檔案讀寫前,筆者準備先說明java.io套件的File類別,此類別可以處理作業系統的檔案和資料夾,讓Java程式取得指定資料夾的檔案和子資料夾清單、檔案資訊、建立資料夾和刪除檔案等操作。 Java程式處理檔案、資料夾與檔案I/O時,都需要匯入java.io套件,如下所示: import java.io.*;
4
9-4-1 顯示檔案和資料夾清單-建立File物件
在Java程式只需建立File物件,就可以取得檔案或資料夾的相關資訊,如下所示: File f = new File(String); 上述程式碼建立File物件f,File()建構子參數是檔案或資料夾路徑。
5
9-4-1 顯示檔案和資料夾清單-相關方法 如果是資料夾,可以進一步使用下列方法取得檔案和資料夾清單,如下表所示:
6
9-4-2 顯示檔案資訊 File類別提供方法來取得檔案相關資訊,如下表所示:
7
9-4-3 更改檔名與刪除檔案 在File類別提供方法來刪除檔案、更改檔案或資料夾名稱,如下表所示:
8
9-4-4 建立資料夾 File類別提供方法可以建立子資料夾,其方法如下表所示:
9
9-5 Java的輸入/輸出串流 9-5-1 串流的基礎 9-5-2 java.io套件的串流類別 9-5-3 標準輸出與輸入串流
10
9-5-1 串流的基礎 串流(Stream)觀念最早使用在Unix作業系統,串流模型如同水管的水流,當程式開啟一個來源的輸入串流(例如:檔案、記憶體和緩衝區等),Java程式可以從輸入串流依序讀取資料,如下圖所示:
11
9-5-2 java.io套件的串流類別-說明 Java的java.io套件提供多種串流類別,基本上,Java串流類別分成兩大類:
「字元串流」(Character Stream) 「位元組串流」(Byte Stream)
12
9-5-2 java.io套件的串流類別-字元串流
字元串流(Character Stream) 字元串流是Java 1.1版才支援的串流類別,這是一種適合「人類閱讀」(Human-readable)的串流,Reader/Writer兩個類別分別讀取和寫入16位元的字元資料,屬於字元串流的父抽象類別。
13
9-5-2 java.io套件的串流類別-位元組串流
位元組串流(Byte Stream) 位元組串流是一種「電腦格式」(Machine-formatted)串流,可以讀取和寫入8位元的位元組資料,也就是處理二進位資料的執行檔、圖檔和聲音等,其父抽象類別的輸入/輸出串流名稱為InputStream/OutputStream類別。
14
9-5-3 標準輸出與輸入串流-說明 Java標準輸出和輸入是指System類別的System.out和System.in子類別,System類別並不屬於java.io套件,而是屬於java.lang套件。 本書的Java程式範例已經大量使用System.out的println()和print()方法來輸出資料,如下所示: System.out.println("…."); System.out.print("…."); 上述程式碼的差別只在是否換行。System.out是PrintStream類別的物件;PrintStream是OutputStream的子類別。System.in則是InputStream類別的物件。
15
9-5-3 標準輸出與輸入串流-標準輸出 在Java程式將字串輸出到螢幕顯示就是開啟System.out標準輸出的OutputStreamWriter串流,我們可以使用緩衝器類別的BufferedWriter串流來加速資料處理,如下所示: BufferedWriter output = new BufferedWriter( new OutputStreamWriter(System.out)); 程式碼開啟標準輸出串流,BufferedWriter類別是繼承自Writer類別且新增過載方法write()來輸出字串內容。 void write(String) :寫入1個字串 void write(String, int, int) :寫入從第2個參數int索引值開始,長度為第3個參數int的字串
16
9-5-3 標準輸出與輸入串流-標準輸入 Java程式從鍵盤輸入資料是開啟System.in標準輸出的InputStreamReader串流,我們同樣可以使用緩衝器類別BufferedReader串流來加速資料處理,如下所示: BufferedReader input = new BufferedReader( new InputStreamReader(System.in)); 程式碼開啟標準輸入串流,接著使用Reader類別方法從標準輸入讀取資料,BufferedReader類別是繼承自Reader類別,新增方法readLine() 。 String readLine() :讀取一行文字內容的字串,這一行是使用「\r」、「\n」或「\r\n」結尾
17
9-6 檔案的讀取與寫入 9-6-1 文字檔案的讀寫 9-6-2 二進位檔案的讀寫 9-6-3 隨機存取檔案的讀寫
18
9-6-1 文字檔案的讀寫-相關方法 Reader/Writer類別可以處理字元串流的文字檔案讀寫,類別提供一些方法,可以在串流讀取和寫入字元和字元陣列,其說明如下表所示:
19
9-6-1 文字檔案的讀寫-寫入文字檔案(建立FileWriter)
在Java程式開啟文字檔案是建立FileWriter串流後,使用緩衝器BufferedWriter串流來加速資料處理,如下所示: BufferedWriter output = new BufferedWriter( new FileWriter(file)); 上述程式碼的參數file是檔案路徑字串。
20
9-6-1 文字檔案的讀寫-寫入文字檔案(寫入字串)
BufferedWriter類別繼承Writer類別,新增過載方法write()來輸出字串,然後我們就可以使用write()方法將字串寫入檔案,如下所示: output.write(str1); output.write(str2); 在寫入檔案後,最後可以使用close()方法關閉串流,如下所示: output.close();
21
9-6-1 文字檔案的讀寫-讀取文字檔案 Java程式開啟檔案是使用FileReader串流,我們一樣可以使用緩衝器BufferedReader串流來加速資料處理,如下所示: BufferedReader input = new BufferedReader( new FileReader(file)); 讀取整個文字檔案內容可以使用while迴圈配合readLine()方法,如下所示: while ( (str1 = input.readLine()) != null ) System.out.println(str1); 上述迴圈檢查讀取的字串是否為null,以判斷是否已經讀到檔尾。
22
9-6-2 二進位檔案的讀寫-說明 Java I/O是使用位元組串流的InputStream/OutputStream類別來處理二進位檔案的讀取和寫入。在InputStream/OutputStream類別提供對應Reader/Writer類別的方法,可以讀取和寫入位元組和位元組陣列。
23
9-6-2 二進位檔案的讀寫-相關方法 在InputStream/OutputStream類別提供對應Reader/Writer類別的方法,可以讀取和寫入位元組和位元組陣列,其說明如下表所示:
24
9-6-2 二進位檔案的讀寫-開啟位元組串流 位元組串流的檔案I/O是開啟FileOutputStream和FileInputStream串流,如下所示: FileOutputStream output = new FileOutputStream(file); ……… FileInputStream input = new FileInputStream(file); 上述2列程式碼分別建立輸出和輸入串流,其來源和輸出都是檔案,參數是file檔案路徑字串。
25
9-6-2 二進位檔案的讀寫-轉換成字元串流 位元組串流如果需要轉換成字元串流,我們需要使用InputStreamWriter/InputStreamReader串流當作過濾器,將位元組串流過濾成字元串流,如下所示: BufferedOutputStream bos=new BufferedOutputStream( new FileOutputStream(file)); OutputStreamWriter output = new OutputStreamWriter(bos); ……… BufferedInputStream bis=new BufferedInputStream( new FileInputStream(file)); InputStreamReader input = new InputStreamReader(bis); ………
26
9-6-3 隨機存取檔案的讀寫-說明 在本節之前說明的檔案串流都屬於「循序存取串流」(Sequential Access Streams),只能依序讀取和寫入檔案內容。 「隨機存取檔案」(Random Access File)是使用非順序和隨機方式來存取檔案內容,它如同是一個儲存成檔案的陣列,可以使用索引存取元素,此索引稱為「檔案指標」(File Pointer)。
27
9-6-3 隨機存取檔案的讀寫-開啟檔案 RandomAccessFile類別因為同時實作DataInput和DataOutput介面,可以使用同一個類別來讀取和寫入檔案,如下所示: RandomAccessFile input, input1; input = new RandomAccessFile(file,"rw"); input1 = new RandomAccessFile(file,"r"); 上述程式碼開啟隨機存取檔案,最後1個參數「rw」表示檔案能夠讀取和寫入,「r」表示只能讀取。
28
9-6-3 隨機存取檔案的讀寫-開啟檔案 RandomAccessFile類別提供下列方法來處理檔案指標,其說明如下表所示:
29
End
Similar presentations