java 文件操作
文件操作——File
File表示目錄信息
- listFiles方法
File的listFiles方法用于返回一個(gè)抽象路徑名數(shù)組,這些路徑名表示此抽象路徑名表示的目錄中的文件。其方法定義:
File[] listFiles()返回值:抽象路徑名數(shù)組,這些路徑名表示此抽象路徑名表示的目錄中的文件和目錄。如果目錄為空,那么數(shù)組也將為空。如果抽象路徑名不表示一個(gè)目錄,或者發(fā)生 I/O 錯(cuò)誤,則返回 null。
- FileFilter接口
通過listFiles方法我們可以獲取一個(gè)目錄下的所有子項(xiàng),但有些時(shí)候我們并不希望獲取全部子項(xiàng),而是想獲取部分滿足我們實(shí)際需求的子項(xiàng)時(shí),我們可以使用File的重載方法:
File[] listFiles(FileFilter filter)這里我們看到,該重載方法 要求我們傳入一個(gè)參數(shù),其類型是FileFilter。什么是FileFilter呢? FileFilter是用于抽象路徑名的過濾器,說白了就是定義一個(gè)規(guī)律規(guī)則,那么結(jié)合listFiles方法,我們就可以將滿足此過濾規(guī)則的子項(xiàng)返回,其他則忽略。
FileFilter是一個(gè)接口,所以當(dāng)我們需要定義某種過濾規(guī)則時(shí),我們可以定義一個(gè)類來實(shí)現(xiàn)這個(gè)接口,而此接口的實(shí)例可傳遞給 File 類的listFiles(FileFilter) 方法。
例如:
File[] list = dir.listFiles(new FileFilter() {@Overridepublic boolean accept(File pathname) {return pathname.getName().startsWith(".");} });該方法的參數(shù)FileFilter實(shí)例的accept方法并進(jìn)行過濾,listFiles方法會(huì)將所有accept方法返回true的子項(xiàng)保留并返回。這個(gè)例子里我們會(huì)將dir中子項(xiàng)的名字以"."開頭的返回。
文件操作——RandomAccessFile
創(chuàng)建對(duì)象
簡(jiǎn)介
Java提供了一個(gè)可以對(duì)文件隨機(jī)訪問的操作,訪問包括讀和寫操作。該類名為RandomAccessFile。該類的讀寫是基于指針的操作。
只讀模式
RandomAccessFile在對(duì)文件進(jìn)行隨機(jī)訪問操作時(shí)有兩個(gè)模式,分別為只讀模式(只讀取文件數(shù)據(jù)),和讀寫模式(對(duì)文件數(shù)據(jù)進(jìn)行讀寫)。
只讀模式:
RandomAccessFile(File file,String mode)RandomAccessFile(String filename,String mode) 在創(chuàng)建RandomAccessFile時(shí),其提供的構(gòu)造方法要求我們傳入訪問模式: 其中構(gòu)造方法的第一個(gè)參數(shù)是需要訪問的文件,而第二個(gè)參數(shù)則是訪問模式:
r”:字符串”r”表示對(duì)該文件的訪問是只讀的。
讀寫模式
創(chuàng)建一個(gè)基于文件訪問的讀寫模式的RandomAccessFile我們只需要在第二個(gè)參數(shù)中傳入”rw”即可。
RandomAccessFile raf = new RandomAccessFile(file,”rw”); 那么這時(shí)在使用RandomAccessFile對(duì)該文件的訪問就是又可讀又可寫的。
字節(jié)數(shù)據(jù)讀寫操作
write(int d)方法
void write(int d)
RandomAccessFile提供了一個(gè)可以向文件中寫出字節(jié)的方法:
該方法會(huì)根據(jù)當(dāng)前指針?biāo)谖恢锰帉懭胍粋€(gè)字節(jié),是將參數(shù)int的”低8位”寫出。
read()方法
int read()
RandomAccessFile提供了一個(gè)可以從文件中讀取字節(jié)的方法:
該方法會(huì)從RandomAccessFile當(dāng)前指針位置讀取一個(gè)byte(8位) 填充到int的低八位, 高24位為0, 返回值范圍正數(shù): 0~255, 如果返回-1表示讀取到了文件末尾EOF(EOF:End Of File)! 每次讀取后自動(dòng)移動(dòng)文件指針, 準(zhǔn)備下次讀取。
write(byte[] d)方法
void write(byte[] d)RandomAccessFile提供了一個(gè)可以向文件中寫出一組字節(jié)的方法:
該方法會(huì)根據(jù)當(dāng)前指針?biāo)谖恢锰庍B續(xù)寫出給定數(shù)組中的所有字節(jié),與該方法相似的還有一個(gè)常用方法:
void write(byte[] d,int offset,int len) 該方法會(huì)根據(jù)當(dāng)前指針?biāo)谖恢锰庍B續(xù)寫出給定數(shù)組中的部分字節(jié),這個(gè)部分是從數(shù)組的offset處開始,連續(xù)len個(gè)字節(jié)。
read(byte[] d)方法
int read(byte[] b)RandomAccessFile提供了一個(gè)可以從文件中批量讀取字節(jié)的方法:
該方法會(huì)從文件中嘗試最多讀取給定數(shù)組的總長(zhǎng)度的字節(jié)量,并從給定的字節(jié)數(shù)組第一個(gè)位置開始,將讀取到的字節(jié)順序存放至數(shù)組中,返回值
為實(shí)際讀取到的字節(jié)量 。close方法
RandomAccessFile在對(duì)文件訪問的操作全部結(jié)束后,要調(diào)用close()方法來釋放與其關(guān)聯(lián)的所有系統(tǒng)資源。
void close()例如:
RandomAccessFile raf = new RandomAccessFile(file,”rw”);…..//讀寫操作 raf.close();//訪問完畢后要關(guān)閉以釋放系統(tǒng)資源。?
文件指針操作
getFilePointer方法
RandomAccessFile的讀寫操作都是基于指針的,也就是說總是在指針當(dāng)前所指向的位置進(jìn)行讀寫操作。
RandomAccessFile提供了一個(gè)可以獲取當(dāng)前指針位置的方法:
long getFilePointer() RandomAccessFile在創(chuàng)建時(shí)默認(rèn)指向文件開始(第一個(gè)字節(jié)),通過getFilePointer方法獲取指針位置時(shí)值是"0"。
例如:
RandomAccessFile raf = new RandomAccessFile(file,”rw”);System.out.println(raf.getFilePointer());//0raf.write(‘A’);//寫出一個(gè)字節(jié)后,指針自動(dòng)向后移動(dòng)到下一個(gè)字節(jié)位置System.out.println(raf.getFilePointer());//1raf.writeInt(3);System.out.println(raf.getFilePointer());//5raf.close(); seek方法
RandomAccessFile的提供了一個(gè)方法用于移動(dòng)指針位置。
void seek(long pos) 使用該方法可以移動(dòng)指針到指定位置。
例如:
RandomAccessFile raf = new RandomAccessFile(file,”rw”);System.out.println(raf.getFilePointer());//0raf.write(‘A’);//指針位置1raf.writeInt(3);//指針位置5raf.seek(0);//將指針移動(dòng)到文件開始處(第一個(gè)字節(jié)的位置)System.out.println(raf.getFilePointer());//0raf.close(); skipBytes方法
RandomAccessFile的提供了一個(gè)方法可以嘗試跳過輸入的 n 個(gè)字節(jié)以丟棄跳過的字節(jié),方法定義為:
int skipBytes(int n) 該方法可能跳過一些較少數(shù)量的字節(jié)(可能包括零)。這可能由任意數(shù)量的條件引起;在跳過n個(gè)字節(jié)之前已到達(dá)文件的末尾只是其中的一種可
能。此方法不拋出 EOFException。返回跳過的實(shí)際字節(jié)數(shù)。如果 n 為負(fù)數(shù),則不跳過任何字節(jié)。
轉(zhuǎn)載于:https://www.cnblogs.com/yangliguo/p/8456879.html
總結(jié)
- 上一篇: 拍一套孕妇照贵吗?大概要多少钱?
- 下一篇: 命令行程序增加 GUI 外壳