- File類
實用類庫工具:幫助我們處理文件目錄的問題。
File既能代表一個特定文件的名稱,又能代表一個目錄下的一組文件的名稱。
如果它指的是一個文件集,那就可以對此集合調用list()方法, 這個方法會返回一個字符數組。
1.1 目錄列表器
如果想查看File對象包含的全部列表,那就調用不帶參數的list()方法。
如果想獲得一個受限列表,就要用到目錄過濾器。
1.2 目錄實用工具
輸入和輸出
流是一個抽象的概念,它代表任何有能力產出數據的數據源對象或者是有能力接受數據的數據端對象,流屏蔽了實際的IO設備中處理數據的細節。
任何自InputStream或Reader派生而來的類都含有名為read()的基本方法,用于讀取單個字節或者字節數組。
任何自OutputStream或Writer派生而來的類都含有名為write()的基本方法,用于寫單個字節或字節數組。
我們很少通過單一的類來創建流對象,而是通過疊合多個對象來提供所期望的功能。添加屬性和有用的接口
FilterInputStream和FilterOutputStream是用來提供裝飾器類接口已控制特定輸入流和輸出流的兩個類。
3.1 通過FilterInputStream從InputStream讀取數據
FilterInputStream類能夠完成兩件完全不同的事情。
DateInputStream允許我們讀取不同的基本類型數據以及String對象。
其他FilterInputStream類則在內部修改InputStream的行為方式。
3.2 通過FilterOutputStream向OutputSteam寫入 ###
類 功能 Cool
col 3 is right-aligned $1600
col 2 is centered $12
zebra stripes are neat $1
- Reader和Writer
Reader和Writer的繼承層次結構主要是為了國際化。老的IO流僅支持8位字節流,不能很好耳釘處理16位的Unicode字符。
4.1 數據的來源和去處
也就是各種read相對應的writer類
4.2 更改流的行為
4.3 未發生變化的類
有些類在Java1.0和Java1.1之間沒有發生改變
自我獨立的類: RandomAccessFile
RandomAccessFile適用于由大小已知的記錄組成的文件。
RandomAccessFile的工作方式類似于把DataInputStream和DataOutStream組合起來使用,還添加了一些方法。I/O流的典型使用方式
6.1 緩沖輸入文件
6.2 從內存輸入
6.3 格式化的內存輸入
使用DateInputStream, 它是一個面向字節的IO類。所以W我們必須使用InputStream類而不是Reader類。
6.4 基本的文件輸出
6.5 存儲和恢復數據
6.6 讀寫隨機訪問文件
6.7 管道流
用于任務之間的通信
文件讀寫的實用工具
讀取文件到內存,修改然后寫出,這樣的常見操作需要寫相當多的代碼。所以我們需要在類庫中添加幫助類。標準I/O
8.1 從標準輸入中讀取
8.2 將System.out轉換成PrintWriter
PrintWriter out = new PrintWriter(System.out, true); out.println("Hello, world");
8.3 標準IO重定向
- 進程控制
- 新I/O
- 壓縮
JavaIo支持讀寫壓縮格式的數據流。 屬于InputStream和OutputSteam繼承層次結構的一部分。
11.1 用GZIP進行簡單壓縮
直接將輸出流封裝成GZIPOutputStream或者ZipOutputStream。
輸出流封裝成GZIPInputStream或者ZipInputStream。
11.2 用Zip進行多文件保存
11.3 Java檔案文件
命令符
- 對象序列化
Java的對象序列化將那些實現了Serializable接口的對象轉換成一個字節序列,并能夠在以后將這個字節序列完全恢復為原來的對象。
12.1 尋找類
通過序列化來還原對象的時候,必須保證Java虛擬機能夠找到相關的.class文件
12.2 序列化的控制
某些特定子對象不想讓Java的序列化機制自動保存與恢復,而是重新創建。
對于Serializable對象,對象完全以它存儲的二進制位為基礎來構造,而不調用構造器。
而對于Externalizable對象,所有普通的默認構造器都會被調用,(包括在字段定義時的初始化),然后再調用readExternal()。
如果我們從一個Externalizable對象繼承,通常需要調用基類版本的writeExternal()和readExternal()來為基類組件提供恰當的存儲和恢復功能。
所以我們要writeExternal()方法中將來自對象的重要信息寫入,還必須在readExternal()中恢復數據。
transient(瞬時)關鍵字
某些特定子對象不想讓Java的序列化機制自動保存與恢復。
方法一是將類實現為Externalizable。
方法二是將類實現為Serializable,然后利用transient關鍵字逐個字段地關閉序列化。
Externalizable的替代方法
如果不是特別堅持實現Externalizable接口,那么可以實現Serializable接口,并添加writeObject()和readObject()方法。
在調用ObjectOutputStream.writeObject()時,會檢查所傳遞的Serializable對象,看看是否實現了它自己的writeObject()方法,如果是這樣,就跳過正常的序列化過程并調用它的writeObject()。
readObject()相同。
12.3 使用“持久性
XML
Preferences
總結