610 likes | 776 Views
第åç« 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 類別.
E N D
第十章 I/O串流與檔案處理 鄧姚文 http://www.ywdeng.idv.tw
大綱 • 10-1 使用File類別 • 10-2 字元串流的處理 • 10-3 位元串流資料的處理 • 10-4 再談檔案的處理 • 10-5 序列化的處理 • 10-6New I/O API
10-1 使用FILE類別 • File類別中的方法不涉及檔案的讀寫 • 提供檔案與目錄的相關資訊,包含檔案的建立,大小、修改日期、存取權限… • File類別包含三種建構子:
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");
10-1-1File類別的屬性 • 使用File類別欄位屬性取得目錄的分隔符號,或路徑的分隔字元:
10-1-2File類別的方法 • File類別提供處理檔案與目錄的方法
練習 • 列出目前目錄的內容 • 以 File(".") 取得目前工作目錄 • 列出目前目錄中所有的子目錄與檔案 • 包括檔案大小
10-2 字元串流的處理 • Java 以「Reader」和「Writer」類別分別處理字元資料的讀取和寫入 • 支援 16-bitUnicode 標準字元集。 • 「Reader」和「Writer」都是 abstract 類別,實際用來處理I/O動作的是這兩個類別的子類別。
10-2 字元串流的處理 • 「Reader」有下列的子類別:
10-2 字元串流的處理 • 「Writer 」有下列的子類別:
10-2-1READER和WRITER類別 • Reader 讀取資料,常見的方法有:
10-2-1READER和WRITER類別 • Writer 寫入資料,常見的方法有:
10-2-2BUFFEREDREADER和BUFFEREDWRITER類別 • 緩衝資料流 (Buffered Stream) 藉由一塊記憶體緩衝區連結I/O資料流,提升I/O效能。BufferedReader類別讀取字元緩衝區中的資料。
10-2-3CHARARRAYREADER和CHARARRAYWRITER類別 • CharArrayReader和CharArrayWriter類別以記憶體作為stream的來源,處理字元陣列的內容。 • CharArrayReader 建構子:
10-2-3CHARARRAYREADER和CHARARRAYWRITER類別 • CharArrayReader 屬性欄位:
10-2-3CHARARRAYREADER和CHARARRAYWRITER類別 • CharArrayReader 常用方法:
10-2-3CHARARRAYREADER和CHARARRAYWRITER類別 • CharArrayWritter 建構子:
10-2-3CHARARRAYREADER和CHARARRAYWRITER類別 • CharArrayWriter 屬性欄位
10-2-4PUSHBACKREADER類別 • PushbackReader類別繼承自FilterReader類別。 • PushbackReader類別提供檢查串流物件內容的功能,該類別有以下兩種建構子:
10-2-4PUSHBACKREADER類別 • PushbackReader類別提供unread()方法,可將一個或一個以上的字元退還給輸入資料流。
10-2-5INPUTSTREAMREADER和OUTPUTSTREAMWRITER類別 • InputStreamReader和InputStreamWriter類別存取字元串流資料。 • InputStreamReader 四種建構子:
10-2-5INPUTSTREAMREADER和OUTPUTSTREAMWRITER類別 • OutputStreamWritter 建構子:
10-2-5INPUTSTREAMREADER和OUTPUTSTREAMWRITER類別 • OutputStreamWriter 常用方法:
10-3位元串流資料的處理 • 位元串流提供處理8-bits位元資料的功能,常用來處理二進位的資料,例如:影像、聲音 • Java提供「InputStream」和「OutputStream」類別分別處理位元資料的讀取和寫入 • 「InputStream」和「OutputStream」都是 abstract 類別,實際用來處理I/O動作的是這兩個類別的子類別
10-3位元串流資料的處理 • 「InputStream」主要的子類別:
10-3位元串流資料的處理 • 「OutputStream」主要的子類別:
10-3-1INPUTSTREAM和OUTPUTSTREAM類別 • InputStream 常用方法
10-3-1INPUTSTREAM和OUTPUTSTREAM類別 • OutputStream 常用方法:
10-3-2使用FILEINPUTSTREAM和FILEOUTPUTSTREAM類別 • 利用FileInputStream類別可以自實體檔案中讀取資料,該類別的建構子為:
10-3-2使用FILEINPUTSTREAM和FILEOUTPUTSTREAM類別 • 利用FileOutputStream類別可以將資料一次以一個位元的方式寫入檔案中,該類別的建構子為:
10-3-3 使用BYTEARRAYINPUTSTREAM和BYTEARRAYOUTPUTSTREAM類別10-3-3 使用BYTEARRAYINPUTSTREAM和BYTEARRAYOUTPUTSTREAM類別 • 利用ByteArrayInputStream類別自位元組陣列中開啟輸入串流
10-3-3 使用BYTEARRAYINPUTSTREAM和BYTEARRAYOUTPUTSTREAM類別 • 利用ByteArrayOutputStream類別將一個位元組資料寫入記憶體緩衝區中
10-4 再談檔案的處理 • 可以用串接的方式進行檔案處理以增進效能。 • DataInputStream衍生自FilterInputStream,DataOutputStream衍生自FilterOutputStream。
10-4-1 DATAINPUTSTREAM和DATAOUTPUTSTREAM類別 • DataInputStream有一系列的「read」方法可以加強資料讀取的能力,例如:「readBoolean()」、「readByte()」、「readChar()」、「readDouble()」、「readFloat()」、「readLong()」、「readShort()」、「readInt()」 • 「readFully()」讀取全部
10-4-1 DATAINPUTSTREAM和DATAOUTPUTSTREAM類別 • DataOutputStream有一系列的「write」方法可以加強檔案的寫入能力,例如: 「writeByte()」、 「writeBoolean()、「 writeChar()」、「writeDouble()」、「writeFloat()」、「writeLong()」、「writeShort()」、「writeInt()」等方法可以用寫入不同型態的資料 • 「writeChars()」寫入字串資料。
10-4-2 FILEREADER和FILEWRITE類別 • 對於雙位元組文字資料應使用 FileReader、BufferedReader、FileWriter、BufferedWriter
FILEREADER 和 FILEWRITER • 以 FileReader 讀取檔案public class FileReader extends InputStreamReader
FILEREADER 和 FILEWRITER • 以 FileWriter 寫檔案public class FileWriter extends OutputStreamWriter
練習 • Word Count 計算字數與行數 • 設計一個程式,計算一個文字檔案內的字元數與行數。 • 輸入:從 args 傳入檔案名稱 • 輸出:字數、行數 • 測試檔
10-5 序列化的處理 • 「序列化 (Serialization)」是將物件寫入到串流的程序。 • 「反序列化 (Deserialization) 」則是將串流讀出來的程序。 • ObjectInputStream 和ObjectOutputStream 處理序列化和反序列化的工作 • 類別必須實作 Serializable 介面
10-5 序列化的處理 • ObjectInputStream類別的建構子為: • ObjectOutputStream類別的建構子為:
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的類別包含在以下的五個套件之中:
10-6 NEW I/O API • New I/O API的基礎項目是「頻道 (channels)」和「緩衝器 (buffer)」。channels代表和I/O裝置的連結,而buffer容納資料