1 / 126

第 7 章  Java的檔案處理

第 7 章  Java的檔案處理. Java 2 程式設計入門與應用. 目錄. 7-1  認識檔案處理 7-2  資料夾與檔案處理 7-3  文字檔的輸入與輸出 7-4  二進位檔的輸入與輸出 7-5  隨機檔 7-6  標準輸入與輸出 溫故知新 自我突破習題. 7-1 認識檔案處理. 7-1.1 檔案類型與資料流 7-1.2 Java 的檔案處理類別. 前言:. 所謂的檔案就是儲存在電腦磁碟中的資料,包含文字、圖片、影片、聲音等格式,利用程式將這些檔案輸入與輸出( Input/Output ,簡稱 I/O )就稱為檔案處理。.

Download Presentation

第 7 章  Java的檔案處理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第7章 Java的檔案處理 Java 2 程式設計入門與應用

  2. 目錄 • 7-1 認識檔案處理 • 7-2 資料夾與檔案處理 • 7-3 文字檔的輸入與輸出 • 7-4 二進位檔的輸入與輸出 • 7-5 隨機檔 • 7-6 標準輸入與輸出 • 溫故知新 • 自我突破習題

  3. 7-1 認識檔案處理 • 7-1.1 檔案類型與資料流 • 7-1.2 Java的檔案處理類別

  4. 前言: • 所謂的檔案就是儲存在電腦磁碟中的資料,包含文字、圖片、影片、聲音等格式,利用程式將這些檔案輸入與輸出(Input/Output,簡稱I/O)就稱為檔案處理。

  5. 7-1.1 檔案類型與資料流 • 電腦的檔案有多種儲存格式,大致上可將檔案分為文字檔(Text File)與二進位檔(Binary File)兩種格式。 • 所謂文字檔就是可以在文字編輯器中閱讀與編輯的檔案,例如:文字檔案、Java程式檔案;而二進位檔在文字編輯器中開啟則是一群無法辨識的亂碼與符號,例如:影像檔、聲音檔與圖片檔……等。

  6. 文字檔與二進位檔的比較: • 文字檔與二進位檔的差別在於讀取和寫入檔案時的轉換方式不同。 • 在Windows作業系統中,每個文字檔案都有反回(Carriage Return,簡稱CR)字元、換行(Line Feed,簡稱LF)字元與結尾(End of File,簡稱EOF)字元,其中CR的十六進位表示法為0d,LF的十六進位表示法為0a,而EOF的十六進位表示法為1a(也就是在鍵盤上按下組合鍵 + 的意思)。

  7. 在文字檔與二進位檔讀取與寫入資料的情形說明如下:在文字檔與二進位檔讀取與寫入資料的情形說明如下: • 文字檔:讀取文字檔時若遇到CR/LF字元會自動轉換成只有LF字元("\n"),若遇到十六進位1a則會自動轉換成EOF字元;而寫入資料到文字檔時會將LF字元轉換成CR/LF字元,將EOF字元轉換成十六進位1a。 • 二進位檔:二進位檔是沒有處理過的位元組資料,不會像文字檔一樣自動轉換字元,所以讀取與寫入檔案的資料完全相同。在前面曾經提過二進位檔包括影像檔、聲音檔與圖片檔……等,所以在文字編輯器中會是一堆無法辨識的亂碼。

  8. 資料流: • 資料流(Data Stream)是一系列排列好的位元組資料,在Java中以資料流來輸入與輸出檔案,會將資料流轉換成相對應的資料格式,例如:文字、圖片、聲音與影像等。 • 在Java中輸入表示從檔案中讀取資料到記憶體中(Read),而輸出剛好相反,將記憶體中的資料輸出到檔案中(Write)。

  9. 7-1.2Java的檔案處理類別 • 在Java的java.io類別庫(java.io中的類別皆繼承自java.lang.Object類別)中提供了多個子類別,可以進行檔案處理,值得注意的是,在使用這些類別前必須先以import指令載入java.io類別庫,並且處理IOException所拋出的例外情況。

  10. 下圖為java.io類別庫中較常用的檔案處理類別:下圖為java.io類別庫中較常用的檔案處理類別:

  11. 上面的類別說明如下: • File類別:處理作業系統中的檔案與資料夾,包含建立與刪除等動作。 • BufferReader/BufferWriter類別:讀取/儲存緩衝區資料,緩衝區可以暫存從外部裝置讀取的資料(例如:前面教的在程式執行結果視窗中輸入資料,就是讀取使用者輸入到緩衝區中的資料),或是要儲存到外部裝置的資料。 • FileReader/FileWriter類別:讀取/儲存文字檔案。 • FileInputStream/FileOutputStream類別:讀取/儲存文字或二進位檔案。 • RandomAccessFile類別:讀取或儲存隨機檔案。

  12. 7-2 資料夾與檔案處理 • 7-2.1 查看資料夾與檔案的資訊 • 7-2.2 處理資料夾與檔案

  13. 前言: • java.io類別庫的File類別提供了許多函式,可以對作業系統中的資料夾與檔案進行操作,以及查看資料夾與檔案的各種資訊。

  14. 7-2.1 查看資料夾與檔案的資訊 • 在Java中若要查看資料夾與檔案的資訊,必須要先建立File物件,其語法如下: • 上述語法參數的資料夾或檔案名稱若與Java程式在同一層目錄,直接撰寫資料夾或檔案名稱即可,例如:Java.txt;若是在不同目錄底下,就必須指定完整的路徑,例如:C:\\Java.txt(因為字串裡單獨的反斜線\會被視為跳脫字元,所以必須用兩個反斜線\\來分隔每一層目錄)。

  15. 下面是File類別中查看資料夾與檔案資訊的函式:下面是File類別中查看資料夾與檔案資訊的函式:

  16. 例如下面的程式碼:

  17. 上述程式碼分析如下: • 第3行必須在main()方法的參數列後面拋出IOException例外處理。 • 第9行判斷若File物件是資料夾就執行第10~15行的程式碼,否則在第17行判斷File物件是否為檔案。 • 第12行宣告字串陣列s儲存資料夾中的清單名稱,並在第13~15行利用for迴圈逐一顯示所有資料夾與檔案的名稱。

  18. 完成後,執行程式的畫面顯示如下:

  19. 7-2.2 處理資料夾與檔案 • 在處理資料夾與檔案前也要先建立File物件,下面是File類別中處理資料夾與檔案資訊的函式:

  20. 例如下面的程式碼:

  21. 上述程式碼分析如下: • 第5~8行宣告四個File物件,f1~f3是檔案,f4是資料夾。 • 第9~10行判斷當ch07_02_02a.txt存在時,就修改檔名為ch07_02_02.txt。 • 第11~12行判斷當ch07_02_02b.txt存在時,就刪除該檔案。 • 第13~14行判斷當ch07_02_02資料夾存在時,就建立ch07_02_02.txt;若不存在,則建立ch07_02_02資料夾。

  22. 完成後,畫面顯示如下: : • 完成後執行程式,會發現Java程式的目錄底下的ch07_02_02a.txt改名為ch07_02_02.txt,ch07_02_02b.txt已經被刪除,並且自動建立ch07_02_02資料夾,畫面顯示如下:

  23. 7-3 文字檔的輸入與輸出 • 7-3.1 檔案處理函式 • 7-3.2 從文字檔案讀取資料—FileReader類別 • 7-3.3 將資料寫入文字檔案—FileWriter類別 • 7-3.4 逐行讀取資料—BufferedReader類別 • 7-3.5 逐行寫入資料—BufferedWriter類別

  24. 前言: • 撰寫程式時,經常需要應用文字檔的輸出入技巧,尤其要處理的資料量很多時,可以利用檔案來輸出與輸入資料,這種方式可以永久保存資料,是存取資料的重要程式技巧。

  25. 7-3.1 檔案處理函式 • java.io類別庫的Reader與Writer類別提供了許多檔案處理的函式,可以讓衍生的類別使用,分別說明如下: • 上面的函式可以應用在Reader與Writer類別衍生的BufferedReader、BufferedWriter、FileReader與FileWriter類別。

  26. 7-3.2 從文字檔案讀取資料—FileReader類別 • 利用FileReader類別讀取文字檔案的資料,必須依照下面五個步驟來撰寫程式碼。

  27. 宣告字元陣列儲存要讀取的文字資料: • 為了避免檔案中的字元數超過設定的陣列大小,可以將陣列大小設定較大的數字。

  28. 建立FileReader物件: • 建立FileReader物件時,必須指定要讀取的檔案名稱,若檔案與Java程式在同一層目錄,直接撰寫檔案名稱即可,例如:ch07_03_02.txt;若是在不同目錄底下,就必須指定完整的路徑,例如:D:\\Sample\\CH07\\ch07_03_02.txt(因為字串裡單獨的反斜線\會被視為跳脫字元,所以必須用兩個反斜線\\來分隔每一層目錄)。 • 參數"讀取的檔案名稱"可以換成File物件,會讀取File物件的檔案。

  29. 使用read函式讀取檔案的資料: • 利用read函式讀取檔案的資料並儲存到指定的字元陣列中,這裡宣告的整數是儲存讀取的資料長度。

  30. 將讀取的字元資料轉換成字串: • 建立String物件時,必須指定轉換從索引值為0到資料長度的資料,若不指定資料範圍,就會將當初宣告的陣列大小全部顯示出來(沒有資料的地方會以空白字元填滿)。

  31. 關閉檔案: • 利用close函式可以關閉檔案,關閉檔案後就不可以再讀取檔案。

  32. 例如下面的程式碼:

  33. 上述程式碼分析如下: • 第1行必須載入java.io類別庫。 • 第3行必須在main()方法的參數列後面拋出IOException例外處理。 • 第7行建立FileReader物件,並且指定讀取的檔名為ch07_03_02.txt,若是該檔案不存在會做例外處理,拋出找不到檔案的錯誤訊息。 • 第9行利用read函式讀取ch07_03_02.txt檔案中的資料,並將該檔案中的資料長度儲存在變數len中(換行以兩個跳脫字元“\r\n”表示,佔用2個資料長度,所以變數len的值為131)。 • 第13行在檔案處理完成後,必須利用close函式關閉檔案。

  34. 完成後,執行程式的畫面顯示如下:

  35. 7-3.3 將資料寫入文字檔案—FileWriter類別 • 利用FileWriter類別儲存文字檔案的資料,必須依照下面三個步驟來撰寫程式碼。

  36. 建立FileWriter物件: • 建立FileWriter物件時,必須指定要儲存的檔案名稱,有下面兩種方式(檔案名稱的寫法與建立FileReader物件的相同): • FileWriter 物件名稱=new FileWriter("儲存的檔案名稱");:原本檔案中的資料會被覆蓋。 • FileWriter 物件名稱=new FileWriter("儲存的檔案名稱",布林值);:若布林值為true,則會將資料附加在原本資料的後面;若布林值是false,就會預設為覆蓋原本資料。 • 參數"儲存的檔案名稱"可以換成File物件,會儲存File物件的檔案。

  37. 使用write函式將資料寫入檔案: • 要儲存的資料可以是字元、字元陣列或字串型別。

  38. 關閉檔案: • 利用close函式可以關閉檔案,關閉檔案後就不可以再儲存資料。

  39. 例如下面的程式碼:

  40. 上述程式碼分析如下: • 第7行建立FileWriter物件,並指定儲存的檔名為ch07_03_03.txt,因為沒有設定布林值,所以若該檔案原本存在,會覆蓋原本檔案中的資料。 • 第9與11行利用write函式分別將字串s與字元陣列c寫入檔案中。 • 第13行利用close函式關閉檔案。 • 第14~20行利用FileReader物件讀取ch07_03_03.txt,並顯示出來。

  41. 完成後,執行程式的畫面顯示如下:

  42. 7-3.4 逐行讀取資料—BufferedReader類別 • 除了利用FileReader類別來讀取文字檔案,也可以利用BufferedReader類別先建立一個緩衝區物件,然後使用readLine函式逐行讀取緩衝區的資料,這樣就不用預先宣告一個字元陣列來儲存讀取的資料了。 • 利用BufferedReader類別讀取文字檔案的資料,必須依照下面三個步驟來撰寫程式碼。

  43. 建立BufferedReader物件: • 利用一個FileReader物件當做參數來建立BufferedReader物件,同樣地,必須指定要儲存的檔案名稱(檔案名稱的寫法與建立FileReader物件的相同)。

More Related