【JAVA IO】_RandomAccessFile筆記
本章目標:
掌握RandomAccessFile類的作用
可以使用RandomAccessFile讀取指定位置的資料
RandomAccessFile類的主要功能是完成隨機讀取功能,可以讀取指定位置的內容。
RandomAccessFile是按位元組進行讀取資料的。要想瞭解資料類型的位元組長度請看這裡:
java裡面一個字元占幾個位元組?
http://blog.csdn.net/e421083458/article/details/8518578
Java中字串在不同字元編碼中所佔位元組數
http://blog.csdn.net/e421083458/article/details/8518601
public RandomAccessFile(File file,String mode) throws FileNotFoundException
mode即開啟模式:
r:讀模式
w:唯寫
rw:讀寫,如果使用此模式,如果檔案不存在,則會自動建立。
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() ; // 關閉 }};
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() ; // 關閉 }};
總結:
byte b[] = new byte[8] ; // 開闢byte數組
for(int i=0;i<b.length;i++){
b[i] = rdf.readByte() ; // 讀取一個位元組,因為每次只能讀取一個位元組
}
name = new String(b) ; // 將讀取出來的byte數組變為字串