<黑馬程序員>RandomAccessFile類的使用簡述


 RandomAccessFile 是隨機讀取訪問的類,這類不算是IO體系中的子類,而是直接繼承自Object,但是他是IO包中的成員,因爲他具備讀和寫的功能,內部封裝了一個數組,而且通過指針對數組中的元素進行操作,可以通過getFilePointer獲取指針位置,同時可以通過Seek 改變指針的位置, 其實完成讀寫的原理就是內部封裝了,字節輸入流和輸出流, 通過構造函數可以看出,該類值能操作文件,而且操作文件還有模式, 模式:只讀r, 讀寫:rw
 如果模式爲r,不會創建文件,會去讀取一個已存在的文件,如果該文件不存在,則會出現異常。


 如果模式爲rw的話,而且該對象的構造函數要操作的文件不存在,會自動創建,如果存在,則不會覆蓋
 那麼我們可以通過以下這個例子進行分析


import java.io.*;


public class RandomAccessFile_demo {
public void RandomAccessFile_demo1() throws IOException{
RandomAccessFile w = new RandomAccessFile("rd.txt","rw");
w.write("李四".getBytes());//寫入了四個字節,兩個漢字,一個漢字佔兩個字節
w.writeInt(98);/*此處寫年齡時需要用writeInt方法,如果使用write方法,根據幫助文檔,write是按照一個字節寫入文件的方法
98在一個字節之內,但是如果是258,則超過了一個字節,258轉換二進制的後八位,並根據ASCII表找對應的符號
所以此處應該使用writeInt方法,按照四個字節寫入文件
*/
w.write("王五".getBytes());
w.writeInt(120);

w.seek(8*3);//將指針放在數組第8*3個位置,及以下操作從這個位置進行,意思是,上面寫的李四、王五,加上年齡,一共是佔了2*8個字節
//效果是,王五和李四之間,空了8個字節,這就是該類的隨機讀寫特有方法 
//效果:李四   b王五   x        張三   ?
//w.seek(8*0),如果此處從8*0個位置開始寫,則會把李四、98覆蓋,這個方法的特有方式是指針可以前後移動,
//相反,skipByte(8)方法,則是跳過8個字節,後進行讀寫操作,但是跳過後,就不能會跳了,指針無法往回移動。
w.write("張三".getBytes());
w.writeInt(170);
w.close();
}
public void RandomAccessFile_demo2() throws IOException{
RandomAccessFile r = new RandomAccessFile("rd.txt","rw");
r.seek(8*3);//根據測試例子,從數組的第8*3的位置讀取,即讀出的是 張三 170
byte[] bt = new byte[4];

r.read(bt);//將文件讀取,放到bt數組中,由於測試例子,李四是四個字節,所以此處讀取bt.lengh的長度的數據存在四個字節數組中
String name = new String(bt);//將存滿的bt數組,轉換成字符串
System.out.println("name = "+name);//輸出字符串

int age = r.readInt();//根據測試例子,然後讀取一個32位整數,即4個字節,由於之前存放的年齡就是四個字節,此處取出的是年齡
System.out.println("age = "+age);
r.close();
}


}


                                                                                                 -------android培訓JAVA培訓、期待與您交流! ----------

--------詳細請查看www.itheima.com-------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章