1 / 61

第十章 I/O 串流與檔案處理

第十章 I/O 串流與檔案處理. 鄧姚文 http://www.ywdeng.idv.tw. 大綱. 10-1  使用 File 類別 10-2  字元串流的處理 10-3  位元串流資料的處理 10-4  再談檔案的處理 10-5  序列化的處理 10-6 New I/O API. 10-1  使用 FILE 類別. File 類別中的方法不涉及檔案的讀寫 提供檔案與目錄的相關資訊,包含檔案的建立,大小、修改日期、存取權限 … File 類別包含三種建構子:. 10-1  使用 FILE 類別.

yair
Télécharger la présentation

第十章 I/O 串流與檔案處理

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. 第十章 I/O串流與檔案處理 鄧姚文 http://www.ywdeng.idv.tw

  2. 大綱 • 10-1 使用File類別 • 10-2 字元串流的處理 • 10-3 位元串流資料的處理 • 10-4 再談檔案的處理 • 10-5 序列化的處理 • 10-6New I/O API

  3. 10-1 使用FILE類別 • File類別中的方法不涉及檔案的讀寫 • 提供檔案與目錄的相關資訊,包含檔案的建立,大小、修改日期、存取權限… • File類別包含三種建構子:

  4. 10-1 使用FILE類別 • 範例:在目前的目錄下建立一個參考到「test.txt」檔案的File物件 File f1 = new File("test.txt"); • 範例:利用File類別處理目錄 File f2 = new File("c:\\TestDir"); • 範例:直接參考指定目錄下的檔案 File f3 = new File("c:\\TestDir\\test.txt");

  5. 10-1-1File類別的屬性 • 使用File類別欄位屬性取得目錄的分隔符號,或路徑的分隔字元:

  6. 10-1-2File類別的方法 • File類別提供處理檔案與目錄的方法

  7. 10-1-2File類別的方法

  8. 10-1-2File類別的方法

  9. 10-1-2FILE類別的方法

  10. 練習 • 列出目前目錄的內容 • 以 File(".") 取得目前工作目錄 • 列出目前目錄中所有的子目錄與檔案 • 包括檔案大小

  11. 10-2 字元串流的處理 • Java 以「Reader」和「Writer」類別分別處理字元資料的讀取和寫入 • 支援 16-bitUnicode 標準字元集。 • 「Reader」和「Writer」都是 abstract 類別,實際用來處理I/O動作的是這兩個類別的子類別。

  12. 10-2 字元串流的處理 • 「Reader」有下列的子類別:

  13. 10-2 字元串流的處理 • 「Writer 」有下列的子類別:

  14. 10-2-1READER和WRITER類別 • Reader 讀取資料,常見的方法有:

  15. 10-2-1READER和WRITER類別 • Writer 寫入資料,常見的方法有:

  16. 10-2-2BUFFEREDREADER和BUFFEREDWRITER類別 • 緩衝資料流 (Buffered Stream) 藉由一塊記憶體緩衝區連結I/O資料流,提升I/O效能。BufferedReader類別讀取字元緩衝區中的資料。

  17. BUFFEREDREADER

  18. BUFFEREDWRITTER

  19. 10-2-3CHARARRAYREADER和CHARARRAYWRITER類別 • CharArrayReader和CharArrayWriter類別以記憶體作為stream的來源,處理字元陣列的內容。 • CharArrayReader 建構子:

  20. 10-2-3CHARARRAYREADER和CHARARRAYWRITER類別 • CharArrayReader 屬性欄位:

  21. 10-2-3CHARARRAYREADER和CHARARRAYWRITER類別 • CharArrayReader 常用方法:

  22. 10-2-3CHARARRAYREADER和CHARARRAYWRITER類別 • CharArrayWritter 建構子:

  23. 10-2-3CHARARRAYREADER和CHARARRAYWRITER類別 • CharArrayWriter 屬性欄位

  24. CHARARRAYWRITTER 常用方法

  25. 10-2-4PUSHBACKREADER類別 • PushbackReader類別繼承自FilterReader類別。 • PushbackReader類別提供檢查串流物件內容的功能,該類別有以下兩種建構子:

  26. 10-2-4PUSHBACKREADER類別 • PushbackReader類別提供unread()方法,可將一個或一個以上的字元退還給輸入資料流。

  27. 10-2-5INPUTSTREAMREADER和OUTPUTSTREAMWRITER類別 • InputStreamReader和InputStreamWriter類別存取字元串流資料。 • InputStreamReader 四種建構子:

  28. 10-2-5INPUTSTREAMREADER和OUTPUTSTREAMWRITER類別 • OutputStreamWritter 建構子:

  29. 10-2-5INPUTSTREAMREADER和OUTPUTSTREAMWRITER類別 • OutputStreamWriter 常用方法:

  30. 10-3位元串流資料的處理 • 位元串流提供處理8-bits位元資料的功能,常用來處理二進位的資料,例如:影像、聲音 • Java提供「InputStream」和「OutputStream」類別分別處理位元資料的讀取和寫入 • 「InputStream」和「OutputStream」都是 abstract 類別,實際用來處理I/O動作的是這兩個類別的子類別

  31. 10-3位元串流資料的處理 • 「InputStream」主要的子類別:

  32. 10-3位元串流資料的處理 • 「OutputStream」主要的子類別:

  33. 10-3-1INPUTSTREAM和OUTPUTSTREAM類別 • InputStream 常用方法

  34. 10-3-1INPUTSTREAM和OUTPUTSTREAM類別 • OutputStream 常用方法:

  35. 10-3-2使用FILEINPUTSTREAM和FILEOUTPUTSTREAM類別 • 利用FileInputStream類別可以自實體檔案中讀取資料,該類別的建構子為:

  36. 10-3-2使用FILEINPUTSTREAM和FILEOUTPUTSTREAM類別 • 利用FileOutputStream類別可以將資料一次以一個位元的方式寫入檔案中,該類別的建構子為:

  37. 10-3-3 使用BYTEARRAYINPUTSTREAM和BYTEARRAYOUTPUTSTREAM類別10-3-3 使用BYTEARRAYINPUTSTREAM和BYTEARRAYOUTPUTSTREAM類別 • 利用ByteArrayInputStream類別自位元組陣列中開啟輸入串流

  38. 10-3-3 使用BYTEARRAYINPUTSTREAM和BYTEARRAYOUTPUTSTREAM類別 • 利用ByteArrayOutputStream類別將一個位元組資料寫入記憶體緩衝區中

  39. 10-4 再談檔案的處理 • 可以用串接的方式進行檔案處理以增進效能。 • DataInputStream衍生自FilterInputStream,DataOutputStream衍生自FilterOutputStream。

  40. 10-4-1 DATAINPUTSTREAM和DATAOUTPUTSTREAM類別 • DataInputStream有一系列的「read」方法可以加強資料讀取的能力,例如:「readBoolean()」、「readByte()」、「readChar()」、「readDouble()」、「readFloat()」、「readLong()」、「readShort()」、「readInt()」 • 「readFully()」讀取全部

  41. 10-4-1 DATAINPUTSTREAM和DATAOUTPUTSTREAM類別 • DataOutputStream有一系列的「write」方法可以加強檔案的寫入能力,例如: 「writeByte()」、 「writeBoolean()、「 writeChar()」、「writeDouble()」、「writeFloat()」、「writeLong()」、「writeShort()」、「writeInt()」等方法可以用寫入不同型態的資料 • 「writeChars()」寫入字串資料。

  42. 10-4-2 FILEREADER和FILEWRITE類別 • 對於雙位元組文字資料應使用 FileReader、BufferedReader、FileWriter、BufferedWriter

  43. FILEREADER 和 FILEWRITER • 以 FileReader 讀取檔案public class FileReader extends InputStreamReader

  44. FILEREADER 和 FILEWRITER • 以 FileWriter 寫檔案public class FileWriter extends OutputStreamWriter

  45. 練習 • Word Count 計算字數與行數 • 設計一個程式,計算一個文字檔案內的字元數與行數。 • 輸入:從 args 傳入檔案名稱 • 輸出:字數、行數 • 測試檔

  46. 10-5 序列化的處理 • 「序列化 (Serialization)」是將物件寫入到串流的程序。 • 「反序列化 (Deserialization) 」則是將串流讀出來的程序。 • ObjectInputStream 和ObjectOutputStream 處理序列化和反序列化的工作 • 類別必須實作 Serializable 介面

  47. 10-5 序列化的處理 • ObjectInputStream類別的建構子為: • ObjectOutputStream類別的建構子為:

  48. 10-6 NEW I/O API • Java 2 1.4 版起新增「New I/O API」。 • New I/O API 補充 java.io 套件中類別的功能。 • New I/O API 以「區塊 (block)」為單位,效率較高 • New I/O API的類別包含在以下的五個套件之中:

  49. 10-6 NEW I/O API • New I/O API的基礎項目是「頻道 (channels)」和「緩衝器 (buffer)」。channels代表和I/O裝置的連結,而buffer容納資料

  50. 10-6-1 channels

More Related