1. 程式人生 > 其它 >RandomAccessFile類-隨機存取檔案流

RandomAccessFile類-隨機存取檔案流

RandomAccessFile 宣告在 java . io 包下,但直接繼承與 java . lang . Object 類。並且它實現了 DataInput、DataOutput 這兩個介面,也就意味著這個類既可以讀也可以寫。

RandomAccessFile 類支援 “隨機訪問” 的方式,程式可以直接跳到檔案的任意地方來讀、寫檔案

支援只訪問檔案的部分內容

可以向已存在的檔案後追加內容

RandomAccessFile 物件包含一個記錄指標,用以表示當前讀寫的位置

建立 RandomAccessFile 類例項需要指定一個 mode 引數,該引數指定 RandomAccessFile 的訪問模式

r:以只讀的方式開啟

rw:開啟以便讀取和寫入

rwd:開啟以便讀取和寫入;同步檔案內容的更新

rws:開啟以便讀取和寫入;同步檔案內容和元資料的更新

實現資料的存取

 1 import java.io.File;
 2 import java.io.IOException;
 3 import java.io.RandomAccessFile;
 4  
 5 public class RandomAccessFileTest {
 6     public void RandomAccessFileTest() {
 7         RandomAccessFile raf1 = null
; 8 RandomAccessFile raf2 = null; 9 try { 10 raf1 = new RandomAccessFile(new File("saber.jpg"),"r"); 11 raf2 = new RandomAccessFile(new File("saber1.jpg"),"rw"); 12 byte[] buffer = new byte[1024]; 13 int len; 14 while ((len = raf1.read(buffer)) != -1){
15 raf2.write(buffer,0,len); 16 } 17 } catch (IOException e) { 18 e.printStackTrace(); 19 } finally { 20 try { 21 raf1.close(); 22 } catch (IOException e) { 23 e.printStackTrace(); 24 } finally { 25 try { 26 raf2.close(); 27 } catch (IOException e) { 28 e.printStackTrace(); 29 } 30 } 31 } 32 } 33 }

實現在指定位置插入資料

 1 //在檔案內容索引位置為3處插入資料
 2 import org.junit.Test;
 3 import java.io.File;
 4 import java.io.IOException;
 5 import java.io.RandomAccessFile;
 6  
 7 public class RandomAccessFileTest {
 8     @Test
 9     public void RandomAccessFileTest() {
10         RandomAccessFile raf1 = null;
11         try {
12             raf1 = new RandomAccessFile("hello.txt","rw");
13             raf1.seek(3);//將指標調到角標為3的位置
14             //儲存指標3後面的所有資料到StringBuilder中
15             StringBuilder builder = new StringBuilder((int) new File("hello.txt").length());
16             byte[] buffer = new byte[20];
17             int len;
18             while ((len = raf1.read(buffer)) != -1){
19                 builder.append(new String(buffer,0,len));
20             }
21             //回撥指標,寫入“abc”
22             raf1.seek(3);
23             raf1.write("abc".getBytes());
24             //將StringBuilder中的資料寫入到檔案中
25             raf1.write(builder.toString().getBytes());
26         } catch (IOException e) {
27             e.printStackTrace();
28         } finally {
29             try {
30                 if (raf1 != null)
31                 raf1.close();
32             } catch (IOException e) {
33                 e.printStackTrace();
34             }
35         }
36     }
37 }