RandomAccessFile爲「隨機讀取類」

public RandomAccessFile(File file,
                        String mode)
                 throws FileNotFoundException
建立從中讀取和向其中寫入(可選)的隨機訪問文件流,該文件由 File 參數指定。將建立一個新的 FileDescriptor 對象來表示此文件的鏈接。
mode 參數指定用以打開文件的訪問模式。容許的值及其含意爲:
含意
"r" 以只讀方式打開。調用結果對象的任何 write 方法都將致使拋出 IOException
"rw" 打開以便讀取和寫入。若是該文件尚不存在,則嘗試建立該文件。
"rws" 打開以便讀取和寫入,對於 "rw",還要求對文件的內容或元數據的每一個更新都同步寫入到底層存儲設備。
"rwd" 打開以便讀取和寫入,對於 "rw",還要求對文件內容的每一個更新都同步寫入到底層存儲設備。
"rws""rwd" 模式的工做方式極其相似
FileChannel 類的 force(boolean) 方法,分別傳遞 truefalse 參數,除非它們始終應用於每一個 I/O 操做,並所以一般更爲高效。若是該文件位於本地存儲設備上,那麼當返回此類的一個方法的調用時,能夠保證由該調用對此文件所作的全部更改均被寫入該設備。這對確保在系統崩潰時不會丟失重要信息特別有用。若是該文件不在本地設備上,則沒法提供這樣的保證。
"rwd" 模式可用於減小執行的 I/O 操做數量。使用 "rwd" 僅要求更新要寫入存儲的文件的內容;使用 "rws" 要求更新要寫入的文件內容及其元數據,這一般要求至少一個以上的低級別 I/O 操做。
若是存在安全管理器,則使用 file 參數的路徑名做爲其參數調用它的 checkRead 方法,以查看是否容許對該文件進行讀取訪問。若是該模式容許寫入,那麼還使用該路徑參數調用該安全管理器的 checkWrite 方法,以查看是否容許對該文件進行寫入訪問。
代碼1----寫操做
import java.io.File ;
import java.io.RandomAccessFile ;
public class RandomAccessFileDemo01{
   // 全部的異常直接拋出,程序中再也不進行處理
   public static void main(String args[]) throws Exception{
    File f = new File( "d:" + File.separator + "test.txt") ;   // 指定要操做的文件
    RandomAccessFile rdf = null ;     // 聲明RandomAccessFile類的對象
    rdf = new RandomAccessFile(f, "rw") ; // 讀寫模式,若是文件不存在,會自動建立
    String name = null ;
     int age = 0 ;
    name = "zhangsan" ;       // 字符串長度爲8
    age = 30 ;           // 數字的長度爲4
    rdf.writeBytes(name) ;     // 將姓名寫入文件之中
    rdf.writeInt(age) ;       // 將年齡寫入文件之中
    name = "lisi        " ;       // 字符串長度爲8
    age = 31 ;           // 數字的長度爲4
    rdf.writeBytes(name) ;     // 將姓名寫入文件之中
    rdf.writeInt(age) ;       // 將年齡寫入文件之中
    name = "wangwu    " ;       // 字符串長度爲8
    age = 32 ;           // 數字的長度爲4
    rdf.writeBytes(name) ;     // 將姓名寫入文件之中
    rdf.writeInt(age) ;       // 將年齡寫入文件之中
    rdf.close() ;         // 關閉
  }
};
代碼2------讀操做
 
import java.io.File ;
import java.io.RandomAccessFile ;
public class RandomAccessFileDemo02{
   // 全部的異常直接拋出,程序中再也不進行處理
   public static void main(String args[]) throws Exception{
    File f = new File( "d:" + File.separator + "test.txt") ;   // 指定要操做的文件
    RandomAccessFile rdf = null ;     // 聲明RandomAccessFile類的對象
    rdf = new RandomAccessFile(f, "r") ; // 以只讀的方式打開文件
    String name = null ;
     int age = 0 ;
     byte b[] = new byte[8] ;   // 開闢byte數組
     // 讀取第二我的的信息,意味着要空出第一我的的信息
    rdf.skipBytes(12) ;     // 跳過第一我的的信息
     for( int i=0;i<b.length;i++){
      b[i] = rdf.readByte() ;   // 讀取一個字節
    }
    name = new String(b) ;   // 將讀取出來的byte數組變爲字符串
    age = rdf.readInt() ;   // 讀取數字
    System.out.println( "第二我的的信息 --> 姓名:" + name + ";年齡:" + age) ;
     // 讀取第一我的的信息
    rdf.seek(0) ;   // 指針回到文件的開頭
     for( int i=0;i<b.length;i++){
      b[i] = rdf.readByte() ;   // 讀取一個字節
    }
    name = new String(b) ;   // 將讀取出來的byte數組變爲字符串
    age = rdf.readInt() ;   // 讀取數字
    System.out.println( "第一我的的信息 --> 姓名:" + name + ";年齡:" + age) ;
    rdf.skipBytes(12) ;   // 空出第二我的的信息
     for( int i=0;i<b.length;i++){
      b[i] = rdf.readByte() ;   // 讀取一個字節
    }
    name = new String(b) ;   // 將讀取出來的byte數組變爲字符串
    age = rdf.readInt() ;   // 讀取數字
    System.out.println( "第三我的的信息 --> 姓名:" + name + ";年齡:" + age) ;
    rdf.close() ;         // 關閉   } };
相關文章
相關標籤/搜索