RandomAccessFile类: 在底层既封装了in流,又封装了out流(流都是单向的)
创建对象的时候给的两个参数:一个是file 一个是模式 r(只读模式) rw(读写模式) rws(读写加同步到设备) rwd(读写加同步到设备)
io流细节1:流都是单向的
io流细节2:IO流都会有一个游标,表示读/写到某个位置了。接下来就是继续对着这个游标操作
正常的 我们用OutputStream 存一个整数 到一个txt文件里面
@Test//OutputStream的写
public void writeDemo0(){
try {
OutputStream out = new FileOutputStream("d:\\a\\b.txt");
//out.write(97);
out.write(353);//只写入最后一个字节,如果整数参数值的有效数据大于一个字节,会丢失数据
} catch (IOException e) {
e.printStackTrace();
}
}
再用RandomAccessFile类 写
@Test//写
public void writeDemo(){
try {
//这个类只要一new对象,如果文件已经存在则读,否则会立刻创建一个新文件
RandomAccessFile raf = new RandomAccessFile("d:\\a\\a.txt", "rw");
//raf.write(97);
raf.write(353); //256+97 只写入整数参数中的最后一个字节,其余的丢弃
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
再用RandomAccessFile类 读写,以及一些函数
@Test//读写----★最主要是注意控制游标
public void Demo(){
try {
RandomAccessFile raf = new RandomAccessFile("d:/a/a.txt", "rw");
//写
for(int i=0;i<5;i++){
raf.writeDouble(3.14*i);
}
//注意,此时游标已经移动到文件末尾了
raf.seek(16);//pos以字节为单位,进行定位游标
raf.writeDouble(0);
raf.skipBytes(8);//游标往前跳8个字节
raf.writeInt(20);//游标直接定位
raf.writeInt(30);
//读
raf.seek(0);//把游标定位到文件开始处
for(int i=0;i<4;i++){
double d = raf.readDouble();
System.out.println(d);
}
int n1=raf.readInt();
int n2=raf.readInt();
System.out.println(n1+","+n2);
} catch (IOException e) {
e.printStackTrace();
}
}