如果模式爲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-------------