File類
- File類是操作文件和文件目錄的類污桦,能新建针肥、刪除、重命名象迎、文件和目錄
- 但File類不能訪問(wèn)文件本身的內(nèi)容荧嵌,如果需要訪問(wèn)文件內(nèi)容,則需要使用輸入/輸出流
- File對(duì)象可以作為參數(shù)砾淌,傳遞給流的構(gòu)造器啦撮,是操作流的基礎(chǔ)
File類常用方法
public String getAbsolutePath():獲取絕對(duì)路徑
public String getPath() :獲取路徑
public String getName() :獲取名稱
public String getParent():獲取上層文件目錄路徑。若無(wú)汪厨,返回null
public long length() :獲取文件長(zhǎng)度(即:字節(jié)數(shù))赃春。不能獲取目錄的長(zhǎng)度。
public long lastModified() :獲取最后一次的修改時(shí)間骄崩,毫秒值
public String[] list() :獲取指定目錄下的所有文件或者文件目錄的名稱數(shù)組
public File[] listFiles() :獲取指定目錄下的所有文件或者文件目錄的File數(shù)組
public boolean createNewFile() :創(chuàng)建文件。若文件存在薄辅,則不創(chuàng)建要拂,返回false
public boolean mkdir() :創(chuàng)建文件目錄。如果此文件目錄存在站楚,就不創(chuàng)建了脱惰。如果此文件目錄的上層目錄不存在,也不創(chuàng)建窿春。
public boolean mkdirs() :創(chuàng)建文件目錄拉一。如果此文件目錄存在采盒,就不創(chuàng)建了。如果上層文件目錄不存在蔚润,一并創(chuàng)建
public boolean delete(): 刪除磁盤(pán)中的文件或文件目錄磅氨,刪除注意事項(xiàng):Java中的刪除不走回收站。
IO 原理
- I/O是Input/Output的縮寫(xiě)嫡纠,用于處理設(shè)備之間的數(shù)據(jù)傳輸烦租,如讀/寫(xiě)文件,網(wǎng)絡(luò)通訊等
- 在Java程序中除盏,對(duì)于數(shù)據(jù)的輸入/輸出操作叉橱,以"流"的方式進(jìn)行的
- 輸入input:讀取外部數(shù)據(jù)(磁盤(pán)、光盤(pán)等存儲(chǔ)設(shè)備)到程序內(nèi)存中
- 輸出output:將程序內(nèi)存的數(shù)據(jù)者蠕,輸出到存儲(chǔ)設(shè)備
流的分類
- 按操作數(shù)據(jù)單位分類:字節(jié)流(8 bit)窃祝、字符流(16 bit),一個(gè)漢字2個(gè)字節(jié)
- 按數(shù)據(jù)流的流向分類:輸入流踱侣、輸出流
- 按流的角色的不同分類:節(jié)點(diǎn)流粪小、處理流(以Buffered開(kāi)頭的類)
- 對(duì)于文本文件(.txt,.java,.c,.cpp),使用字符流處理
- 對(duì)于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt,...)泻仙,使用字節(jié)流處理糕再,如果用此處理文本,有可能會(huì)出現(xiàn)亂碼
IO 體系
常用流各自的應(yīng)用場(chǎng)景
字符流(操作字符串)
字符輸入流
1玉转、FileReader 字符輸入流:用于文本文件讀取操作突想,例:(.txt,.java,.c,.cpp)等文本文件
2、BufferedReader 緩沖區(qū)字符輸入流:用于提升使用 FileReader 在文件讀取方面的效率究抓,針對(duì)大文本文件的讀取
3猾担、InputStreamReader :將一個(gè)字節(jié)的輸入流轉(zhuǎn)換為字符的輸入流,可以設(shè)置指定字符流的編碼格式
字符輸出流
1刺下、FileWrite 字符輸出流:用于文本文件寫(xiě)入操作绑嘹,例:(.txt,.java,.c,.cpp)等文本文件
2、BufferedWriter 緩沖區(qū)字符輸出流:用于提升使用 FileWrite 在文件寫(xiě)入方面的效率橘茉,針對(duì)大文本文件的寫(xiě)入
3工腋、OutputStreamWriter :將一個(gè)字符的輸出流轉(zhuǎn)換為字節(jié)的輸出流,可以設(shè)置指定字符流的編碼格式
字節(jié)流(操作非文本)
字節(jié)輸入流
1畅卓、FileInputStream 字節(jié)輸入流:用于非文本文件讀取擅腰,例:(.jpg,.mp3,.mp4,.avi,.doc,.ppt)等
2、BufferedInputStream 緩沖區(qū)字節(jié)輸入流:用于提升使用 FileInputStream 在文件讀取方面的效率
字節(jié)輸出流
1翁潘、FileOutputStream 字節(jié)輸出流:用于非文本文件寫(xiě)入操作趁冈,例:(.jpg,.mp3,.mp4,.avi,.doc,.ppt)等
2、BufferedOutputStream 緩沖區(qū)字節(jié)輸出流:用于提升使用 FileoutputStream 在文件寫(xiě)入方面的效率
對(duì)象流
對(duì)象的序列化
- ObjectOutputStream 序列化(寫(xiě)入操作):把內(nèi)存中的Java對(duì)象,轉(zhuǎn)換成平臺(tái)無(wú)關(guān)的二進(jìn)制流渗勘,從而方便保存到磁盤(pán)和網(wǎng)絡(luò)傳輸
- ObjectInputStream 反序列化(讀取操作):把硬盤(pán)/網(wǎng)絡(luò)中的二進(jìn)制流還原成Java對(duì)象沐绒,方便程序調(diào)用
自定義類要想序列化、反序列化旺坠,需滿足以下要求
1乔遮、需要實(shí)現(xiàn)接口:Serializable
2、當(dāng)前類提供一個(gè)全局常量:serialVersionUID
3价淌、除了當(dāng)前Person類需要實(shí)現(xiàn)Serializable接口之外申眼,還必須保證其內(nèi)部所有屬性
也必須是可序列化的。(默認(rèn)情況下蝉衣,基本數(shù)據(jù)類型可序列化)
RandomAccessFile 隨機(jī)讀取寫(xiě)入操作類(應(yīng)用于:多線程繼點(diǎn)下載)
- 1.RandomAccessFile直接繼承于java.lang.Object類括尸,實(shí)現(xiàn)了DataInput和DataOutput接口
- 2.RandomAccessFile既可以作為一個(gè)輸入流,又可以作為一個(gè)輸出流
- 3.如果RandomAccessFile作為輸出流時(shí)病毡,寫(xiě)出到的文件如果不存在濒翻,則在執(zhí)行過(guò)程中自動(dòng)創(chuàng)建,如果寫(xiě)出到的文件存在啦膜,則會(huì)對(duì)原有文件內(nèi)容進(jìn)行覆蓋有送。(默認(rèn)情況下,從頭覆蓋)
- 可以通過(guò)相關(guān)的操作僧家,實(shí)現(xiàn)RandomAccessFile“插入”數(shù)據(jù)的效果