- File類
實(shí)用類庫工具:幫助我們處理文件目錄的問題艾蓝。
File既能代表一個(gè)特定文件的名稱力崇,又能代表一個(gè)目錄下的一組文件的名稱。
如果它指的是一個(gè)文件集赢织,那就可以對此集合調(diào)用list()方法亮靴, 這個(gè)方法會返回一個(gè)字符數(shù)組。
1.1 目錄列表器
如果想查看File對象包含的全部列表于置,那就調(diào)用不帶參數(shù)的list()方法茧吊。
如果想獲得一個(gè)受限列表,就要用到目錄過濾器八毯。
1.2 目錄實(shí)用工具
輸入和輸出
流是一個(gè)抽象的概念搓侄,它代表任何有能力產(chǎn)出數(shù)據(jù)的數(shù)據(jù)源對象或者是有能力接受數(shù)據(jù)的數(shù)據(jù)端對象,流屏蔽了實(shí)際的IO設(shè)備中處理數(shù)據(jù)的細(xì)節(jié)话速。
任何自InputStream或Reader派生而來的類都含有名為read()的基本方法讶踪,用于讀取單個(gè)字節(jié)或者字節(jié)數(shù)組。
任何自O(shè)utputStream或Writer派生而來的類都含有名為write()的基本方法泊交,用于寫單個(gè)字節(jié)或字節(jié)數(shù)組乳讥。
我們很少通過單一的類來創(chuàng)建流對象柱查,而是通過疊合多個(gè)對象來提供所期望的功能。添加屬性和有用的接口
FilterInputStream和FilterOutputStream是用來提供裝飾器類接口已控制特定輸入流和輸出流的兩個(gè)類雏婶。
3.1 通過FilterInputStream從InputStream讀取數(shù)據(jù)
FilterInputStream類能夠完成兩件完全不同的事情物赶。
DateInputStream允許我們讀取不同的基本類型數(shù)據(jù)以及String對象。
其他FilterInputStream類則在內(nèi)部修改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的繼承層次結(jié)構(gòu)主要是為了國際化酵紫。老的IO流僅支持8位字節(jié)流,不能很好耳釘處理16位的Unicode字符错维。
4.1 數(shù)據(jù)的來源和去處
也就是各種read相對應(yīng)的writer類
4.2 更改流的行為
4.3 未發(fā)生變化的類
有些類在Java1.0和Java1.1之間沒有發(fā)生改變
自我獨(dú)立的類: RandomAccessFile
RandomAccessFile適用于由大小已知的記錄組成的文件奖地。
RandomAccessFile的工作方式類似于把DataInputStream和DataOutStream組合起來使用,還添加了一些方法赋焕。I/O流的典型使用方式
6.1 緩沖輸入文件
6.2 從內(nèi)存輸入
6.3 格式化的內(nèi)存輸入
使用DateInputStream参歹, 它是一個(gè)面向字節(jié)的IO類。所以W我們必須使用InputStream類而不是Reader類隆判。
6.4 基本的文件輸出
6.5 存儲和恢復(fù)數(shù)據(jù)
6.6 讀寫隨機(jī)訪問文件
6.7 管道流
用于任務(wù)之間的通信
文件讀寫的實(shí)用工具
讀取文件到內(nèi)存犬庇,修改然后寫出,這樣的常見操作需要寫相當(dāng)多的代碼侨嘀。所以我們需要在類庫中添加幫助類臭挽。標(biāo)準(zhǔn)I/O
8.1 從標(biāo)準(zhǔn)輸入中讀取
8.2 將System.out轉(zhuǎn)換成PrintWriter
PrintWriter out = new PrintWriter(System.out, true); out.println("Hello, world");
8.3 標(biāo)準(zhǔn)IO重定向
- 進(jìn)程控制
- 新I/O
- 壓縮
JavaIo支持讀寫壓縮格式的數(shù)據(jù)流。 屬于InputStream和OutputSteam繼承層次結(jié)構(gòu)的一部分咬腕。
11.1 用GZIP進(jìn)行簡單壓縮
直接將輸出流封裝成GZIPOutputStream或者ZipOutputStream欢峰。
輸出流封裝成GZIPInputStream或者ZipInputStream。
11.2 用Zip進(jìn)行多文件保存
11.3 Java檔案文件
命令符
- 對象序列化
Java的對象序列化將那些實(shí)現(xiàn)了Serializable接口的對象轉(zhuǎn)換成一個(gè)字節(jié)序列涨共,并能夠在以后將這個(gè)字節(jié)序列完全恢復(fù)為原來的對象纽帖。
12.1 尋找類
通過序列化來還原對象的時(shí)候,必須保證Java虛擬機(jī)能夠找到相關(guān)的.class文件
12.2 序列化的控制
某些特定子對象不想讓Java的序列化機(jī)制自動保存與恢復(fù)举反,而是重新創(chuàng)建懊直。
對于Serializable對象,對象完全以它存儲的二進(jìn)制位為基礎(chǔ)來構(gòu)造照筑,而不調(diào)用構(gòu)造器吹截。
而對于Externalizable對象,所有普通的默認(rèn)構(gòu)造器都會被調(diào)用凝危,(包括在字段定義時(shí)的初始化),然后再調(diào)用readExternal()晨逝。
如果我們從一個(gè)Externalizable對象繼承,通常需要調(diào)用基類版本的writeExternal()和readExternal()來為基類組件提供恰當(dāng)?shù)拇鎯突謴?fù)功能。
所以我們要writeExternal()方法中將來自對象的重要信息寫入殿托,還必須在readExternal()中恢復(fù)數(shù)據(jù)。
transient(瞬時(shí))關(guān)鍵字
某些特定子對象不想讓Java的序列化機(jī)制自動保存與恢復(fù)冬念。
方法一是將類實(shí)現(xiàn)為Externalizable。
方法二是將類實(shí)現(xiàn)為Serializable牧挣,然后利用transient關(guān)鍵字逐個(gè)字段地關(guān)閉序列化急前。
Externalizable的替代方法
如果不是特別堅(jiān)持實(shí)現(xiàn)Externalizable接口,那么可以實(shí)現(xiàn)Serializable接口瀑构,并添加writeObject()和readObject()方法裆针。
在調(diào)用ObjectOutputStream.writeObject()時(shí),會檢查所傳遞的Serializable對象寺晌,看看是否實(shí)現(xiàn)了它自己的writeObject()方法世吨,如果是這樣,就跳過正常的序列化過程并調(diào)用它的writeObject()呻征。
readObject()相同耘婚。
12.3 使用“持久性
XML
Preferences
總結(jié)