1. 程式人生 > 其它 >16.隨機訪問流

16.隨機訪問流

1.RandomAccessFile有兩個作用

  1. 可以實現對一個檔案做讀寫的操作

  2. 可以訪問檔案的任意位置,不像其他流,只能按照小猴順序讀取

2.RandomAccessFile的三個核心方法

  • .RandomAccessFile(String name,String dome),name:確定檔案 dome:確定讀寫許可權,r或rw

  • seek(long a),定位流物件的讀寫位置,a:確定度讀寫位置距離檔案開頭的 位元組 個數

  • getFilePointer()獲得流的當前讀寫位置

3.基礎操作

3-1:讀寫資料

import java.io.RandomAccessFile;

public class Dome19 {
   public static void main(String[] args) {
       RandomAccessFile raf = null;
       try {
           //建立隨機訪問流物件
           raf = new RandomAccessFile("d:/test.txt", "rw");
           int[] arr = new int[]{10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
           //寫入資料
           for (int i = 0; i < arr.length; i++) {
               raf.writeInt(arr[i]);
          }
           //定位 讀取或寫入 的位置
           raf.seek(4);
           //列印輸出
           for (int i = 0; i < arr.length-1; i++) {
               System.out.print(raf.readInt() + "\t");
          }
      } catch (Exception e) {
           e.printStackTrace();
      } finally {
           try {
               if (raf != null) {
                   raf.close();
              }
          } catch (Exception e) {
               e.printStackTrace();
          }
      }
  }
}

 

3-2:隔一個讀一個

import java.io.RandomAccessFile;

public class Dome19 {
   public static void main(String[] args) {
       RandomAccessFile raf = null;
       try {
           //建立隨機訪問流物件
           raf = new RandomAccessFile("d:/test.txt", "rw");
           int[] arr = new int[]{10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
           //寫入資料
           for (int i = 0; i < arr.length; i++) {
               raf.writeInt(arr[i]);
          }
           //定位 讀取或寫入 的位置
           raf.seek(0);
           //列印輸出
           for (int i = 0; i < arr.length; i+=2) {
               raf.seek(i*4);
               System.out.print(raf.readInt() + "\t");
          }
      } catch (Exception e) {
           e.printStackTrace();
      } finally {
           try {
               if (raf != null) {
                   raf.close();
              }
          } catch (Exception e) {
               e.printStackTrace();
          }
      }
  }
}

 

3-3:替換某個位置的資料

import java.io.RandomAccessFile;

public class Dome19 {
   public static void main(String[] args) {
       RandomAccessFile raf = null;
       try {
           //建立隨機訪問流物件
           raf = new RandomAccessFile("d:/test.txt", "rw");
           int[] arr = new int[]{10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
           //寫入資料
           for (int i = 0; i < arr.length; i++) {
               raf.writeInt(arr[i]);
          }
           //定位 讀取或寫入 的位置
           raf.seek(0);
           //列印輸出
           for (int i = 0; i < arr.length; i += 2) {
               raf.seek(i * 4);
               System.out.print(raf.readInt() + "\t");
          }
           System.out.println();
           //定位到要替換的位置
           raf.seek(8);
           //替換
           raf.writeInt(45);
           //列印輸出
           for (int i = 0; i < arr.length; i += 2) {
               raf.seek(i * 4);
               System.out.print(raf.readInt() + "\t");
          }
      } catch (Exception e) {
           e.printStackTrace();
      } finally {
           try {
               if (raf != null) {
                   raf.close();
              }
          } catch (Exception e) {
               e.printStackTrace();
          }
      }
  }
}