IO
一、File
1.構(gòu)造函數(shù)
File類沒有無參構(gòu)造函數(shù),最常用的構(gòu)造函數(shù)是File(String pathName),(注意分隔符可以使用"/"和"",但是使用""必須寫"\",因為涉及轉(zhuǎn)義的問題)
2.File類方法
(1)exists() 用于判斷當(dāng)前的文件路徑所對應(yīng)的文件/文件夾是否存在
(2)isDirectory() 用于當(dāng)前文件路徑對應(yīng)的是否是文件夾
(3)listFiles() 獲取該層路徑下所有的文件/文件夾
(4)getName() 獲取文件/文件夾名稱
(5)getPath() 獲取文件/文件夾路徑
(6)getAbsolutePath() 獲取文件/文件夾絕對路徑
(7)getParent() 獲取文件父目錄路徑
(8)canWrite() 判斷文件是否可寫
(9)canRead() 判斷文件是否可讀
(10)canExcute() 判斷文件是否可執(zhí)行
(11)isFile() 判斷文件/文件夾是否是標(biāo)準(zhǔn)文件
(12)isAbsolute() 判斷文件的路徑是否是絕對路徑
(13)lastModified() 文件的最后修改時間
(14)length() 獲取文件的字節(jié)數(shù),如果是一個文件夾則這個值為0
(15) toURI() 獲取文件路徑URI后的路徑名
(16) delete() 刪除指定的文件/文件夾
(17)deleteOnExit() 當(dāng)虛擬機終止的時候,刪除指定的文件/文件夾
二、字節(jié)流
1.使用的流程
(1)使用File類找到一個對象
(2)通過File類的對象去實例化字節(jié)流或者字符流的子類
(3)進(jìn)行字節(jié)(字符)的讀取
(4)關(guān)閉文件流
2.字節(jié)輸出流
OutputStream是定義了Java流式字節(jié)輸入模式的抽象類。該類的所有方法返回一個void值并且在出錯的情況下引發(fā)一個IOException,OutputStream提供的抽象方法有:
(1)close() 關(guān)閉輸出流,關(guān)閉后的寫操作都會引起IOException
(2)flush() 刷新輸出流,強制輸出所有緩沖的輸出字節(jié)
(3)write(byte[] b) 向輸出流寫一個完整的字節(jié)數(shù)組
(4)write(int) 向輸出流寫入單個字節(jié),注意是int類型
(5)write(byte[] b, int off, int len) 以b[off]為起點,向文件寫入字節(jié)數(shù)組b中l(wèi)en個字節(jié)
2.1 FileOutputStream
FileOutpuStream應(yīng)該是Java中最常見的字節(jié)輸出流了,它創(chuàng)建一個可向文件寫入字節(jié)的類OutputStream
構(gòu)造函數(shù):(1)FileOutputStream(String name) (2)FileOutputStream(File file) (3)FileOutputStream(File file, boolean append)
前兩個構(gòu)造方法類似,前者輸入文件的絕對路徑,后者輸入File的實例對象,和RandomAccessFile一樣,推薦后者。第三個構(gòu)造方法有一點不同,append如果設(shè)置為true,文件則以搜索路徑模式打開。FileOutputStream的創(chuàng)建不依賴于文件是否存在,在創(chuàng)建對象時,F(xiàn)ileOutputSStream會在打開輸出文件之前就創(chuàng)建它。這種情況下如果試圖打開一個只讀文件,會引發(fā)IOException。
3.字節(jié)輸入流
InputStream是定義了Java流式字節(jié)輸入模式的抽象類。該類所有方法在出錯的時候都會引發(fā)一個IOException,InputStream提供的抽象方法有:
(1)int available() 返回當(dāng)前可讀的字節(jié)數(shù)
(2)void close() 關(guān)閉此輸入流并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源,關(guān)閉之后再讀取會產(chǎn)生IOException
(3)int mark(int readlimit) 在輸入流中放置一個標(biāo)記,該流在讀取N個Bytes字節(jié)前都保持有效
(4)boolean markSupported() 如果調(diào)用的流支持mark()/reset()就返回true
(5)int read() 如果下一個字節(jié)可讀取則返回一個整形,遇到文件尾時返回-1
(6)int read(byte b[]) 試圖讀取b.length個字節(jié)到b中,并返回實際成功讀取的字節(jié)數(shù),遇到文件尾則返回-1
(7)int read(byte b[], int off, int len) 將輸入流中最多l(xiāng)en個數(shù)組直接讀入byte數(shù)組,off表示數(shù)組b中寫入數(shù)據(jù)的初始偏移量。注意,三個read方法,在輸入數(shù)據(jù)可用、檢測到流末尾或者拋出異常前,此方法將一直阻塞
(8)void reset() 重新設(shè)置輸入指針到先前設(shè)置的標(biāo)記處
(9)long skip(long n) 跳過和丟棄此輸入流中數(shù)據(jù)的n個字節(jié)
3.1FileInputStream
FileInputStream應(yīng)該是Java中最常見的字節(jié)輸入流了,它創(chuàng)建一個能從文件讀取字節(jié)的InputStream類,它的兩個常用構(gòu)造方法如下:
(1) FileInputStream(String name) (2) FileInputStream(File file)
和FileOutputStream差不多,推薦后者的用法。
要區(qū)分清楚,OutputStream的作用是將內(nèi)容由Java內(nèi)存輸出到文件中、InputStream是將內(nèi)容由文件輸入到Java內(nèi)存中。read(byte b[])方法之前講明了,表示"試圖讀取buffer.length個字節(jié)到buffer中,并返回實際讀取的字節(jié)數(shù)",返回的是實際字節(jié)的大小。不要誤以為"Hello World!!!"是14個字符即28個字節(jié),字節(jié)流底層是以byte為單位的,因此文件里面只有14個字節(jié)罷了,至于返回的是20,還是因為"字節(jié)對齊"的問題。