java 文件操作
文件操作——File
File表示目錄信息
- listFiles方法
File的listFiles方法用於返回一個抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中的文件。其方法定義:
File[] listFiles()
返回值:抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中的文件和目錄。如果目錄為空,那麽數組也將為空。如果抽象路徑名不表示一個目錄,或者發生 I/O 錯誤,則返回 null。
- FileFilter接口
通過listFiles方法我們可以獲取一個目錄下的所有子項,但有些時候我們並不希望獲取全部子項,而是想獲取部分滿足我們實際需求的子項時,我們可以使用File的重載方法:
File[] listFiles(FileFilter filter)
這裏我們看到,該重載方法 要求我們傳入一個參數,其類型是FileFilter。什麽是FileFilter呢? FileFilter是用於抽象路徑名的過濾器,說白了就是定義一個規律規則,那麽結合listFiles方法,我們就可以將滿足此過濾規則的子項返回,其他則忽略。
FileFilter是一個接口,所以當我們需要定義某種過濾規則時,我們可以定義一個類來實現這個接口,而此接口的實例可傳遞給 File 類的listFiles(FileFilter) 方法。
例如:
File[] list = dir.listFiles(new
該方法的參數FileFilter實例的accept方法並進行過濾,listFiles方法會將所有accept方法返回true的子項保留並返回。這個例子裏我們會將dir中子項的名字以"."開頭的返回。
文件操作——RandomAccessFile
創建對象
簡介
Java提供了一個可以對文件隨機訪問的操作,訪問包括讀和寫操作。該類名為RandomAccessFile。該類的讀寫是基於指針的操作。
只讀模式
RandomAccessFile在對文件進行隨機訪問操作時有兩個模式,分別為只讀模式(只讀取文件數據),和讀寫模式(對文件數據進行讀寫)。
只讀模式:
RandomAccessFile(File file,String mode)
RandomAccessFile(String filename,String mode)
在創建RandomAccessFile時,其提供的構造方法要求我們傳入訪問模式: 其中構造方法的第一個參數是需要訪問的文件,而第二個參數則是訪問模式:
r”:字符串”r”表示對該文件的訪問是只讀的。
讀寫模式
創建一個基於文件訪問的讀寫模式的RandomAccessFile我們只需要在第二個參數中傳入”rw”即可。
RandomAccessFile raf = new RandomAccessFile(file,”rw”);
那麽這時在使用RandomAccessFile對該文件的訪問就是又可讀又可寫的。
字節數據讀寫操作
write(int d)方法
java void write(int d)
RandomAccessFile提供了一個可以向文件中寫出字節的方法:
該方法會根據當前指針所在位置處寫入一個字節,是將參數int的”低8位”寫出。
read()方法
java int read()
RandomAccessFile提供了一個可以從文件中讀取字節的方法:
該方法會從RandomAccessFile當前指針位置讀取一個byte(8位) 填充到int的低八位, 高24位為0, 返回值範圍正數: 0~255, 如果返回-1表示讀取到了文件末尾EOF(EOF:End Of File)! 每次讀取後自動移動文件指針, 準備下次讀取。
write(byte[] d)方法
java void write(byte[] d)
RandomAccessFile提供了一個可以向文件中寫出一組字節的方法:
該方法會根據當前指針所在位置處連續寫出給定數組中的所有字節,與該方法相似的還有一個常用方法:
void write(byte[] d,int offset,int len)
該方法會根據當前指針所在位置處連續寫出給定數組中的部分字節,這個部分是從數組的offset處開始,連續len個字節。
read(byte[] d)方法
java int read(byte[] b)
RandomAccessFile提供了一個可以從文件中批量讀取字節的方法:
該方法會從文件中嘗試最多讀取給定數組的總長度的字節量,並從給定的字節數組第一個位置開始,將讀取到的字節順序存放至數組中,返回值
為實際讀取到的字節量 。close方法
RandomAccessFile在對文件訪問的操作全部結束後,要調用close()方法來釋放與其關聯的所有系統資源。
java void close()
例如:
java RandomAccessFile raf = new RandomAccessFile(file,”rw”); …..//讀寫操作 raf.close();//訪問完畢後要關閉以釋放系統資源。
?
文件指針操作
getFilePointer方法
RandomAccessFile的讀寫操作都是基於指針的,也就是說總是在指針當前所指向的位置進行讀寫操作。
RandomAccessFile提供了一個可以獲取當前指針位置的方法:
long getFilePointer()
RandomAccessFile在創建時默認指向文件開始(第一個字節),通過getFilePointer方法獲取指針位置時值是"0"。
例如:
RandomAccessFile raf = new RandomAccessFile(file,”rw”);
System.out.println(raf.getFilePointer());//0
raf.write(‘A’);//寫出一個字節後,指針自動向後移動到下一個字節位置
System.out.println(raf.getFilePointer());//1
raf.writeInt(3);
System.out.println(raf.getFilePointer());//5
raf.close();
seek方法
RandomAccessFile的提供了一個方法用於移動指針位置。
void seek(long pos)
使用該方法可以移動指針到指定位置。
例如:
RandomAccessFile raf = new RandomAccessFile(file,”rw”);
System.out.println(raf.getFilePointer());//0
raf.write(‘A’);//指針位置1
raf.writeInt(3);//指針位置5
raf.seek(0);//將指針移動到文件開始處(第一個字節的位置)
System.out.println(raf.getFilePointer());//0
raf.close();
skipBytes方法
RandomAccessFile的提供了一個方法可以嘗試跳過輸入的 n 個字節以丟棄跳過的字節,方法定義為:
int skipBytes(int n)
該方法可能跳過一些較少數量的字節(可能包括零)。這可能由任意數量的條件引起;在跳過n個字節之前已到達文件的末尾只是其中的一種可
能。此方法不拋出 EOFException。返回跳過的實際字節數。如果 n 為負數,則不跳過任何字節。
java 文件操作