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() {@Overridepublic boolean accept(File pathname) {return pathname.getName().startsWith(".");} });該方法的參數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)方法
void write(int d)
RandomAccessFile提供了一個可以向文件中寫出字節的方法:
該方法會根據當前指針所在位置處寫入一個字節,是將參數int的”低8位”寫出。
read()方法
int read()
RandomAccessFile提供了一個可以從文件中讀取字節的方法:
該方法會從RandomAccessFile當前指針位置讀取一個byte(8位) 填充到int的低八位, 高24位為0, 返回值范圍正數: 0~255, 如果返回-1表示讀取到了文件末尾EOF(EOF:End Of File)! 每次讀取后自動移動文件指針, 準備下次讀取。
write(byte[] d)方法
void write(byte[] d)RandomAccessFile提供了一個可以向文件中寫出一組字節的方法:
該方法會根據當前指針所在位置處連續寫出給定數組中的所有字節,與該方法相似的還有一個常用方法:
void write(byte[] d,int offset,int len) 該方法會根據當前指針所在位置處連續寫出給定數組中的部分字節,這個部分是從數組的offset處開始,連續len個字節。
read(byte[] d)方法
int read(byte[] b)RandomAccessFile提供了一個可以從文件中批量讀取字節的方法:
該方法會從文件中嘗試最多讀取給定數組的總長度的字節量,并從給定的字節數組第一個位置開始,將讀取到的字節順序存放至數組中,返回值
為實際讀取到的字節量 。close方法
RandomAccessFile在對文件訪問的操作全部結束后,要調用close()方法來釋放與其關聯的所有系統資源。
void close()例如:
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());//0raf.write(‘A’);//寫出一個字節后,指針自動向后移動到下一個字節位置System.out.println(raf.getFilePointer());//1raf.writeInt(3);System.out.println(raf.getFilePointer());//5raf.close(); seek方法
RandomAccessFile的提供了一個方法用于移動指針位置。
void seek(long pos) 使用該方法可以移動指針到指定位置。
例如:
RandomAccessFile raf = new RandomAccessFile(file,”rw”);System.out.println(raf.getFilePointer());//0raf.write(‘A’);//指針位置1raf.writeInt(3);//指針位置5raf.seek(0);//將指針移動到文件開始處(第一個字節的位置)System.out.println(raf.getFilePointer());//0raf.close(); skipBytes方法
RandomAccessFile的提供了一個方法可以嘗試跳過輸入的 n 個字節以丟棄跳過的字節,方法定義為:
int skipBytes(int n) 該方法可能跳過一些較少數量的字節(可能包括零)。這可能由任意數量的條件引起;在跳過n個字節之前已到達文件的末尾只是其中的一種可
能。此方法不拋出 EOFException。返回跳過的實際字節數。如果 n 為負數,則不跳過任何字節。
轉載于:https://www.cnblogs.com/yangliguo/p/8456879.html
總結
- 上一篇: 拍一套孕妇照贵吗?大概要多少钱?
- 下一篇: 命令行程序增加 GUI 外壳