import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;public class AccessFileRandom {
public static void main(String args[]){
try{
//RandomAccessFile
RandomAccessFile file = new RandomAccessFile("d:/test1.txt","rw");
file.writeBoolean(true);
file.writeInt(12345);
file.writeInt(7890);
file.writeLong(10000);
file.writeFloat(.001f);
file.seek(5);
System.out.println(file.readInt());
file.close();
//FileOutputStream
FileOutputStream fos = new FileOutputStream("d:/test.txt");
for (int i=10000;i<10002;i++){
fos.write(i);
}
fos.close();
RandomAccessFile raf = new RandomAccessFile("d:/test.txt","r");
raf.seek(1);
int i=raf.read();
raf.close();
System.out.println(i);
}catch(IOException e){
}
}
}
2.因为FileOutputStream中,write(int b)是写入低位的8位(1个字节),其余24位全部丢弃,然后RandomAccessFile的Read方法是读入一个字节,所以你seek(1)后读入的是17,你可以试下,你seek(0)是16,然后seek(2),因为已经到达文件末尾,所以你再读取则返回-1。
1)在d:/test1.txt中你写的字节流如下:
1(第0个字节,是表示true) xxxx(第1-4个字节,这四个字节是整数值:12345的四个字节) yyyy(第5-8个字节,这四个字节是整数值:7890的四个字节) wwwwwwww(第9-16个字节,这八个字节是长整数值:10000的八个字节) zzzzzzzz(第17-24个字节,这八个字节是float:.001f的八个字节)
因此:你的
file.seek(5);
//<==正好是yyyy(第5-8个字节,这四个字节是整数值:7890的四个字节)System.out.println(file.readInt()); //<==因此:当然打出:7890了2)for (int i=10000;i <10002;i++){
fos.write(i);
}
代码往文件中写入的实际上是两个字节:16(第0个字节) 17(第1个字节)
当:raf.seek(1);
int i=raf.read();
时,读出的第1个字节 17值
zzzzzzzz(第17-24个字节,这八个字节是float:.001f的八个字节) 说法不对,应该是float写入4个字节
不过,还是要感谢楼上的指导。
结了。