一 、File
概念:File可以代表一個目錄或者一個文件,并不能代表文件的內容
文件和流的區別:File關注的是文件本身的特征,如名稱、路徑、修改時間、大小。
流關注的是文件的內容。
File基本的操作
1. 常見構造方法
| 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. 創建文件操作
mkdir:創建單層目錄 dir1/dir2:必須保證dir1是存在的,才能成功創建dir2
mkdirs:創建層級目錄 dir1/dir2:如果dir1不存在,會先創建dir1,再創建dir2
createNewFile:創建文件 dir1/a :必須保證dir1是存在的,否則,會報系統找不到指定的路徑的異常
3. 文件的常用讀操作(文件名稱、文件名稱)
exists() //文件或者目錄是否存在
isFile() //是否是文件
isDirectory() //是否是目錄
getName() //取文件或者目錄的名字
getPath() //取文件或者目錄的路徑
getAbsolutePath() //取文件絕對路徑
lastModified() //最后修改日期
length() //文件或者目錄的字節大小
list()//獲得當前File對象所表示目錄下的文件和目錄名稱,返回String[]類型的數據。
listFiles()//獲得當前File對象所表示目錄下的文件和目錄,返回File[]類型的數據。
代碼實例
4. 修改文件名稱
注意:修改的新文件名需要是不存在的 ,如果修改前后的目錄一致,那就是重命名的效果,如果修改前后目
錄不一致,相當于會刪除舊目錄中的文件,以新的名稱出現在新目錄中
5. 刪除文件
6. 刪除文件夾
遞歸:
1、自己調用自己
2、必須要一個條件
二、流的概念
File類關心的是磁盤上存儲的文件位置和名稱等,而流是指程序運行中的數據通信信道,當然流類所關心的是文
件的內容。
流的分類
根據流向分為:輸入流,輸出流
根據傳輸單位:字節流,字符流
根據是否和數據源可以直接交互:節點流,處理流
節點流:可以和數據源直接交互,FileInputStream,FileOutPutStream,FileWriter,FileReader
處理流:需要連接嵌套其它的流使用,BufferedReader,BufferedWriter
流的四個根類
1. InputStream(字節輸入流)
FileInputStream:節點流,字節輸入流,按照字節為單位讀文件,文件復制
ObjectInputStream:處理流,對象輸入流,需要嵌套一個字節輸入流進行使用,如
FileInputStream,反序列化
2. OutputStream(字節輸出流)
FileOutputStream:節點流,字節輸出流,按照字節為單位寫,文件復制
ObjectOutPutStream:處理流,對象輸出流,需要嵌套一個字節輸出流,如FileOutputStream進行
使用,序列化
3. Reader(字符輸入流)
FileReader:節點流,針對文件的字符輸入流,以字符為單位讀文件,存在亂碼問題,不能直接按行
進行讀
BufferedReader:處理流,帶緩沖區的字符輸入流,以行為單位讀文件 readLine:返回值為null表示
讀取結束
InputStreamReader:處理流,轉換流(可以將字節流轉換為字符流),需要嵌套節點流使用,讀文
件的指定字符集編碼,解決亂碼問題
4. Writer
FileWriter:節點流,針對文件的字符輸出流,以字符為單位寫文件,存在亂碼問題,不能直接按行
寫
BufferedWriter :處理流,帶緩沖區的字符輸出流,按照行寫字符,newLine
OutPutStreamWriter:處理流,轉換流(可以將字節流轉換為字符流),需要嵌套節點流使用,寫
文件的時候指定字符集編碼,解決亂碼問題
三、字節流
1. FileInputStream
常用api
FileInputStream是InputStream的子類。
FileInputStream是讀取文件的字節輸入流。
FileInputStream常用的構造方法:
FileInputStream(File file)
FileInputStream(String filename)
FileInputStream覆蓋實現了父類如下方法:
int available()
void close()
結構:
int read():一次讀取1個字節,返回值表示讀取的一個字節的數據(一個字節的數據不一定表示一個字符的
編碼),返回值為-1表示讀取結束
2. FileOutputStream
FileOutputStream是OutputStream的子類
FileOutputStream是寫入文件的字節輸出流
FileOutputStream常用的構造方法:
FileOutputStream(File file)
FileOutputStream(String filename)
FileOutputStream(File file,boolean append)
FileOutputStream(String filename,boolean append)
FileOutputStream覆蓋實現了父類如下方法:
void close()
void flush()
void write(int b) :寫入一個字節的數據,參數就是要寫入的數據的編碼
void write(byte[] b) :將數組中的數據寫到文件中,數組中存放的是字符的編碼
void write(byte[] b,int off,int len):將數組指定位置指定長度的數據寫入的文件中
結構:
3. 文件復制