文件操做——RandomAccessFile

構建RandomAccessFilejava

Java提供了一個能夠對文件隨機訪問的操做,訪問包括讀和寫操做。該類名爲RandomAccessFile。該類的讀寫是基於指針的操做。數組

1. 只讀模式dom

RandomAccessFile在對文件進行隨機訪問操做時有兩個模式,分別爲只讀模式(只讀取文件數據),和讀寫模式(對文件數據進行讀寫)。學習

只讀模式:指針

在建立RandomAccessFile時,其提供的構造方法要求咱們傳入訪問模式:code

RandomAccessFile(File file,String mode)資源

RandomAccessFile(String filename,String mode)字符串

其中構造方法的第一個參數是須要訪問的文件,而第二個參數則是訪問模式:it

r」:字符串」r」表示對該文件的訪問是隻讀的。io

2. 讀寫模式

建立一個基於文件訪問的讀寫模式的RandomAccessFile咱們只須要在第二個參數中傳入」rw」便可

RandomAccessFile raf = new RandomAccessFile(file,」rw」);

那麼這時在使用RandomAccessFile對該文件的訪問就是又可讀又可寫的。

字節數據讀寫操做

1. read()方法

RandomAccessFile提供了一個能夠從文件中讀取字節的方法:

int read()

該方法會從RandomAccessFile當前指針位置讀取一個byte(8位) 填充到int的低八位, 高24位爲0, 返回值範圍正數: 0~255, 若是返回-1表示讀取到了文件末尾EOF(EOF:End Of File)! 每次讀取後自動移動文件指針, 準備下次讀取。

2. read(byte[] d)方法

RandomAccessFile提供了一個能夠從文件中批量讀取字節的方法:

int read(byte[] b)

該方法會從文件中嘗試最多讀取給定數組的總長度的字節量,並從給定的字節數組第一個位置開始,將讀取到的字節順序存放至數組中,返回值爲實際讀取到的字節量 。

3. write(int d)方法

RandomAccessFile提供了一個能夠向文件中寫出字節的方法:

void write(int d)

該方法會根據當前指針所在位置處寫入一個字節,是將參數int的」低8位」寫出。

4. write(byte[] d)方法

RandomAccessFile提供了一個能夠向文件中寫出一組字節的方法:

void write(byte[] d)

該方法會根據當前指針所在位置處連續寫出給定數組中的全部字節,與該方法類似的還有一個經常使用方法:

void write(byte[] d,int offset,int len)

該方法會根據當前指針所在位置處連續寫出給定數組中的部分字節,這個部分是從數組的offset處開始,連續len個字節。

offset + len < 數組的長度

5. close方法

RandomAccessFile在對文件訪問的操做所有結束後,要調用close()方法來釋放與其關聯的全部系統資源。

void close()

例如:

RandomAccessFile raf = new RandomAccessFile(file,」rw」);
…..//讀寫操做
raf.close();//訪問完畢後要關閉以釋放系統資源

/**
 * java.io.RandomAccessFile
 * 用於讀寫文件數據的類
 * RAF讀寫文件數據老是在指針當前位置進行讀或寫,
 * 而且讀寫後指針是指向文件數據位置的標記(底層實現).
 * 
 * @author soft01
 *
 */
public class pm02_RandomAccessFile_write {
    public static void main(String[] args) throws IOException {
        /*
         * 第二個參數是讀寫模式,經常使用的有:
         * 「r」:只讀模式,該模式要求讀取的文件必須存在
         * 「rw」:讀寫模式,該模式若文件不存在會自動建立
         * read write
         */
        
        RandomAccessFile raf = new RandomAccessFile("raf.dat","rw");
    
        /*
         * void write(int d)
         * 向文件中寫入一個字節,寫的是給定的int值對應2進制的「低八位」
         * 
         *                             vvvvvvvv
         * 00000000 00000000 000000000 00000001
         * 
         * 寫一個-1其實寫入的是 1111111
         * 00000000 00000000 000000000 11111111
         * 
         */
        raf.write(1); //0000001
        System.out.println("寫出完畢");
        
        //讀寫完畢最終要close
        raf.close();
    }
}
/**
 * 讀取一個字節
 * @author 高行行
 *
 */
public class pm03_RandomAccessFile_read {
    public static void main(String[] args) throws IOException {
        RandomAccessFile raf = new RandomAccessFile("raf.dat","r");
        
        /*
         * 讀取一個字節,並以int形式返回
         * 若返回值爲-1表示讀取到文件末尾
         * 這裏-1的二進制是11111111 111111111 111111111 11111111
         * 
         * 若是讀取的值是-1
         * 讀取的二進制是1111111
         * 
         * read()方法
         * 該方法會從RandomAccessFile當前指針位置讀取一個byte(8位) 
         *  填充到int的低八位,
         *  高24位爲0, 返回值範圍正數: 0~255, 
         *  若是返回-1表示讀取到了文件末尾EOF(EOF:End Of File)! 
         *  每次讀取後自動移動文件指針, 準備下次讀取。
         */
        int d = raf.read(); 
        System.out.println(d); //1
        
        //因爲文件只有一個字節,再次讀寫會返回-1
        d = raf.read(); //-1
        System.out.println(d);
        raf.close();
    }
}/* Output:
1
-1
*/

歡迎加入學習交流羣569772982,你們一塊兒學習交流。

相關文章
相關標籤/搜索