《Java大學教程》—第20章 文件處理
記錄():一個單獨的數(shù)據(jù)實例。
域():一個屬性。
20.3 輸入和輸出設備:P484
輸入過程和輸出過程。
操作系統(tǒng)負責建立三個流(stream):標準輸入流(System.in)、標準輸出流(System.out)、標準錯誤流(System.error)。
輸入類:
* InputStream:提供了許多處理基本輸入的底層方法,主要處理字節(jié)序列。
* InputStreamReader:提供了更高層的處理方法,主要處理字符序列。
* BufferedReader:主要處理字符串形式的輸入數(shù)據(jù)。
20.4 文件操作:P485
讀(reading):輸入過程是將數(shù)據(jù)從文件傳送到存儲器。
寫(writing):輸出過程是將數(shù)據(jù)從存儲器傳送到文件。
操作單位:字節(jié)、字符、字符串、文本行、基本數(shù)據(jù)類型、對象。
20.4.1 編碼:文本、二進制、對象。P486
20.4.2 訪問:順序訪問、隨機訪問。P486
20.5 讀寫文本文件:P491
FileWriter:文件輸出,兩種模式(輸出模式、添加模式),底層方法。
PrintWriter:像輸出到屏幕上一樣,可以設置輸出的格式,高層方法。
注:在將信息寫入文件后,最重要的一步操作是關閉文件。
關閉文件的兩個目的:保證將一個特殊的字符--文件結束符--寫入文件的末尾。關閉文件意味著程序不能再訪問該文件,防止出現(xiàn)錯誤的寫入操作。
FileReader:以只讀方式打開,底層方法。
BufferedReader:依次讀取每個記錄的每個域,高層方法。
20.6 讀寫二進制文件:P495
底層方法:FileOutputStream、FileInputStream
高層方法:DataOutputStream、DataInputStream
20.7 以字符為單位讀取文本文件:P498
BufferedReader.read():從文件中讀取一個字符。
20.8 對象序列化(Serialization):P499
將一個對象轉(zhuǎn)化為適合磁盤存儲的數(shù)據(jù)流的過程稱為序列化(serialization)。
如果需要將對象序列化必須實現(xiàn)Serializable接口,這個接口不含有任何方法,被稱為marker。
它的作用僅是提醒使用該類的用戶:即該類的任何對象都可以以整個對象為單位讀出或?qū)懭搿?/p>
20.9 隨機訪問文件:P502
RandomAccessFile.seek():從開始讀或?qū)懖僮髑皩⑽募羔樢苿拥淖止?jié)數(shù)。
注:打開文件的模式(只讀模式、讀寫模式)。
自測題:
1. 輸入輸出的原理:P484
輸入過程是將數(shù)據(jù)從某個外部設備傳送到內(nèi)存;
輸出過程是將數(shù)據(jù)從主存?zhèn)魉偷侥硞€外部設備。
為了實現(xiàn)輸入和輸出操作,必須在設備和計算機存儲器之間建立一個通信管道。這樣的管道稱為流(stream)。
2. 輸入流和輸出流:P484
操作系統(tǒng)負責建立一個標準輸入流(standard input stream)和標準輸出流(standard output stream),以及一個標準錯誤流(stand error stream)用于顯示錯誤信息。
3. 文本編碼、二進制編碼和對象編碼的區(qū)別:P486
文本編碼格式:存儲在磁盤上的數(shù)據(jù)以字符的形式被外部系統(tǒng)使用--通常是ASCII碼。
二進制編碼格式:數(shù)據(jù)的存儲格式與程序使用的數(shù)據(jù)的內(nèi)部表示相同,即按照數(shù)據(jù)在存儲器中的存儲格式。
對象編碼格式:數(shù)據(jù)是按照一個具體的完整的對象的方式來存取操作的。
4. 順序訪問文件和隨機訪問文件的區(qū)別:P486
順序訪問文件:依次讀出(寫入)每個數(shù)據(jù)元素。操作系統(tǒng)提供文件指針(file pointer),表示存儲器中的一個位置,用于記錄讀寫文件中到達的位置。
隨機訪問文件:直接到達需要的記錄位置。
5. Serializable接口的作用:P499
將一個對象轉(zhuǎn)化為適合磁盤存儲的數(shù)據(jù)流的過程稱為序列化(serialization)。
如果需要將對象序列化必須實現(xiàn)Serializable接口,這個接口不含有任何方法,被稱為marker。
它的作用僅是提醒使用該類的用戶:即該類的任何對象都可以以整個對象為單位讀出或?qū)懭搿?/p>
6. 對象占用的字節(jié)數(shù)=4+2+(20+2)=28
private int x;
private char c;
private String s;
編程練習:代碼附件
1. BinaryFileTester.java
2. FileHandler.java RunFileHandler.java
3. RandomFileTester.java
4. ObjectFileTester.java
5. 先挖坑。。。