一 峦椰、File
概念:File可以代表一個目錄或者一個文件,并不能代表文件的內(nèi)容
文件和流的區(qū)別:File關(guān)注的是文件本身的特征嫩舟,如名稱键袱、路徑、修改時間、大小。
流關(guān)注的是文件的內(nèi)容。
File基本的操作
1. 常見構(gòu)造方法
| File(String pathname) | 建立一個以pathname為路徑的File對象召廷, pathname可以是相對路徑凳厢,也可以
是絕對路徑。|
| File(String parent,String child) | 建立一個以parent加上child為路徑的File對象 |
| File(File parent,String child) | 建立一個以parent加上child為路徑的File對象 |
注意:文件的路徑如果考慮跨平臺竞慢,就使用File.seperator
相對路徑:javase程序中先紫,相對參照點為項目目錄 src/test.項目目錄下的src/test
絕對路徑:e:/test
2. 創(chuàng)建文件操作
mkdir:創(chuàng)建單層目錄 dir1/dir2:必須保證dir1是存在的,才能成功創(chuàng)建dir2
mkdirs:創(chuàng)建層級目錄 dir1/dir2:如果dir1不存在筹煮,會先創(chuàng)建dir1,再創(chuàng)建dir2
createNewFile:創(chuàng)建文件 dir1/a :必須保證dir1是存在的遮精,否則,會報系統(tǒng)找不到指定的路徑的異常
3. 文件的常用讀操作(文件名稱败潦、文件名稱)
exists() //文件或者目錄是否存在
isFile() //是否是文件
isDirectory() //是否是目錄
getName() //取文件或者目錄的名字
getPath() //取文件或者目錄的路徑
getAbsolutePath() //取文件絕對路徑
lastModified() //最后修改日期
length() //文件或者目錄的字節(jié)大小
list()//獲得當前File對象所表示目錄下的文件和目錄名稱本冲,返回String[]類型的數(shù)據(jù)。
listFiles()//獲得當前File對象所表示目錄下的文件和目錄劫扒,返回File[]類型的數(shù)據(jù)檬洞。
代碼實例
4. 修改文件名稱
注意:修改的新文件名需要是不存在的 ,如果修改前后的目錄一致,那就是重命名的效果沟饥,如果修改前后目
錄不一致添怔,相當于會刪除舊目錄中的文件,以新的名稱出現(xiàn)在新目錄中
5. 刪除文件
6. 刪除文件夾
遞歸:
1贤旷、自己調(diào)用自己
2广料、必須要一個條件
二、流的概念
File類關(guān)心的是磁盤上存儲的文件位置和名稱等幼驶,而流是指程序運行中的數(shù)據(jù)通信信道艾杏,當然流類所關(guān)心的是文
件的內(nèi)容。
流的分類
根據(jù)流向分為:輸入流盅藻,輸出流
根據(jù)傳輸單位:字節(jié)流购桑,字符流
根據(jù)是否和數(shù)據(jù)源可以直接交互:節(jié)點流,處理流
節(jié)點流:可以和數(shù)據(jù)源直接交互萧求,F(xiàn)ileInputStream,FileOutPutStream,FileWriter,FileReader
處理流:需要連接嵌套其它的流使用,BufferedReader,BufferedWriter
流的四個根類
1. InputStream(字節(jié)輸入流)
FileInputStream:節(jié)點流其兴,字節(jié)輸入流,按照字節(jié)為單位讀文件夸政,文件復(fù)制
ObjectInputStream:處理流,對象輸入流榴徐,需要嵌套一個字節(jié)輸入流進行使用守问,如
FileInputStream,反序列化
2. OutputStream(字節(jié)輸出流)
FileOutputStream:節(jié)點流坑资,字節(jié)輸出流耗帕,按照字節(jié)為單位寫,文件復(fù)制
ObjectOutPutStream:處理流袱贮,對象輸出流仿便,需要嵌套一個字節(jié)輸出流,如FileOutputStream進行
使用,序列化
3. Reader(字符輸入流)
FileReader:節(jié)點流嗽仪,針對文件的字符輸入流荒勇,以字符為單位讀文件,存在亂碼問題闻坚,不能直接按行
進行讀
BufferedReader:處理流沽翔,帶緩沖區(qū)的字符輸入流,以行為單位讀文件 readLine:返回值為null表示
讀取結(jié)束
InputStreamReader:處理流窿凤,轉(zhuǎn)換流(可以將字節(jié)流轉(zhuǎn)換為字符流),需要嵌套節(jié)點流使用仅偎,讀文
件的指定字符集編碼,解決亂碼問題
4. Writer
FileWriter:節(jié)點流雳殊,針對文件的字符輸出流橘沥,以字符為單位寫文件,存在亂碼問題夯秃,不能直接按行
寫
BufferedWriter :處理流座咆,帶緩沖區(qū)的字符輸出流,按照行寫字符寝并,newLine
OutPutStreamWriter:處理流箫措,轉(zhuǎn)換流(可以將字節(jié)流轉(zhuǎn)換為字符流),需要嵌套節(jié)點流使用衬潦,寫
文件的時候指定字符集編碼斤蔓,解決亂碼問題
三、字節(jié)流
1. FileInputStream
常用api
FileInputStream是InputStream的子類镀岛。
FileInputStream是讀取文件的字節(jié)輸入流弦牡。
FileInputStream常用的構(gòu)造方法:
FileInputStream(File file)
FileInputStream(String filename)
FileInputStream覆蓋實現(xiàn)了父類如下方法:
int available()
void close()
結(jié)構(gòu):
int read():一次讀取1個字節(jié),返回值表示讀取的一個字節(jié)的數(shù)據(jù)(一個字節(jié)的數(shù)據(jù)不一定表示一個字符的
編碼)漂羊,返回值為-1表示讀取結(jié)束
2. FileOutputStream
FileOutputStream是OutputStream的子類
FileOutputStream是寫入文件的字節(jié)輸出流
FileOutputStream常用的構(gòu)造方法:
FileOutputStream(File file)
FileOutputStream(String filename)
FileOutputStream(File file,boolean append)
FileOutputStream(String filename,boolean append)
FileOutputStream覆蓋實現(xiàn)了父類如下方法:
void close()
void flush()
void write(int b) :寫入一個字節(jié)的數(shù)據(jù)驾锰,參數(shù)就是要寫入的數(shù)據(jù)的編碼
void write(byte[] b) :將數(shù)組中的數(shù)據(jù)寫到文件中,數(shù)組中存放的是字符的編碼
void write(byte[] b,int off,int len):將數(shù)組指定位置指定長度的數(shù)據(jù)寫入的文件中
結(jié)構(gòu):
3. 文件復(fù)制