java的IO操作之--RandomAccessFile

來源:互聯網
上載者:User

標籤:

目標:

  1)掌握RandomAccessFile類的作用。

  2)用RandomAccessFile讀取指定位置的資料。

具體內容

  RandomAccessFile類的主要功能是完成隨機讀取功能,可以讀取指定範圍的內容。

  假設檔案中儲存了以下三個資料:

  因為檔案中所有內容都是按照位元組儲存的,都有固定的儲存位置。

  構造方法:

public RandomAccessFile(File file,String mode) throws FileNotFoundException

  執行個體化此類需要傳遞File類,告訴程式應該操作哪個檔案。之後有一個模式,檔案的開啟模式,

  常用的兩種模式:

  1) r:讀模式

  2)w:寫入模式

  3)rw:讀寫入模式,如果使用此模式,如果檔案不存在,則會自動建立

package Thread1;import java.io.File ;import java.io.RandomAccessFile ;public class demo1{    // 所有的異常直接拋出,程式中不再進行處理    public static void main(String args[]) throws Exception{    //在主方法處使用throws拋出異常給JVM處理,
節省了很多異常處理操作
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() ; // 關閉 }};

  寫入的方法:writeBytes(String str);writeInt(int a); 

  運行結果:

  以上完成了寫入的操作。每條資料都是12位。

  寫完開始讀取資料。寫的時候,可以將一個字串寫入(writeBytes(String str)),讀的時候, 需要一個個以位元組讀取出來(readByte())。

  跳過幾個位元組的方法:skipBytes(n),向前幾個位元組的方法:seek(0),數組與字串轉換的方法:String str=new String(char b[])。

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數組變為字串,這裡把數組放到string對象中變成String字串。        age = rdf.readInt() ;    // 讀取數字    //readInt()讀取的大小恰好是4個位元組,讀取前面8個字串後面的幾個數字。        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() ;                // 關閉    }};

  運行結果:

第二個人的資訊 --> 姓名:lisi    ;年齡:31第一個人的資訊 --> 姓名:zhangsan;年齡:30第三個人的資訊 --> 姓名:wangwu  ;年齡:32

  如果要完成檔案內容操作,可以使用RoundomAccessFile()完成。

java的IO操作之--RandomAccessFile

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.