
import java.io.IOException;
import java.io.RandomAccessFile;
import org.junit.Test;
/*用RandomAccessFile,
* 数据流可以理解成静态摊在地上,
* 由我们根据游标(第一次开时从0开始)在指定位置更更改内容(以byte为单位),
* 如果位置计算不准确,那么会把旧数据破坏了。
* 读的时候也要精确计算出从什么位置开始读,读什么类型的数据(多长),
* 否则数据读出来也是错误的。
*
* raf创建一次,进行操作时,它的游标是连续变化的
*
*/
public class RandomAccessFileDemo {
@Test
public void w(){
try {
RandomAccessFile raf=new RandomAccessFile("w.dxt", "rw");
raf.writeInt(100);
raf.write(97);
raf.write(353); //跟io流一样,write(int b)是只写最后一个字节数据:97
raf.writeUTF("湖南城市学院");
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void r(){
try {
RandomAccessFile raf=new RandomAccessFile("w.dxt", "r");
int r=raf.readInt();
System.out.println(r);
raf.skipBytes(2); //控制游标往前跳2个字节
String str = raf.readUTF();
System.out.println(str);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test//要注意控制游标
public void demo(){
try {
RandomAccessFile raf = new RandomAccessFile("b.txt", "rw");
for(int i=0;i<4;i++){
raf.writeDouble(3.14*i);
}
//此时游标在第4个浮点数的末尾
//把游标定位到文件开始处
raf.seek(16);//raf.seek(12);
raf.writeDouble(0);
raf.seek(0);
for(int i=0;i<4;i++){
double d = raf.readDouble();
System.out.println(i+": "+d);
}
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.IOException;
import java.io.Random