RandomAccessFile

2018-08-08  本文已影响0人  luoqiang108
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
/**
 * RandomAccessFile读写文件。
 */
public class RandomAccessFileTest {
    public static void main(String[] args) {
        try {
            /**
             * 向文件.\data.dat中写数据
             * 步骤:
             * 1、创建一个File对象用于描述该文件
             * 2、不存在则创建该文件
             * 3、创建RandomAccessFile,并将File传入。
             * 使RandomAccessFile对File表示的文件进行
             * 读写操作
             * 4、向文件中写入内容
             */
            //1
            File file = new File("data.dat");
            //2、不存在则创建该文件
            if (!file.exists()) {
                file.createNewFile();
            }
            //3、对file文件可以进行读写操作
            RandomAccessFile raf =new RandomAccessFile(file,"rw");
            //4、写一个int最大值
            /**
             * 2位16进制代表一个字节(8位2进制)
             * 1位16进制代表4位2进制 f==1111
             * 4字节代表32位2进制
             *
             * write(int)写一个字节
             *    7f       ff       ff       ff
             * 01111111 11111111 11111111 11111111
             *
             * 00000000 00000000 00000000 01111111 00 00 00 7f
             * 00000000 00000000 01111111 11111111 00 00 7f ff
             * 00000000 01111111 11111111 11111111 00 7f ff ff
             * 01111111 11111111 11111111 11111111 7f ff ff ff
             */
            int i = 0x7fffffff;//int最大值
            //写int值最高的8位
            raf.write(i>>>24);//00 00 00 7f
            raf.write(i>>>16);//00 00 7f ff
            raf.write(i>>>8);//00 7f ff ff
            raf.write(i);    //7f ff ff ff
            //定义一个10字节数组
            byte[] data = new byte[]{0,1,2,3,4,5,6,7,8,9};
            //将这10个字节全部写入文件
            raf.write(data);
            //写到这里,当前文件应该有14个字节了
            /**
             * 写字节数组的重载方法
             *write(byte[] data,int offset,int length)
             * 从data数组的offset位置开始写,连续写length个字节到文件中。
             */
            raf.write(data,2,5);//{2,3,4,5,6}
            System.out.println("当前指针位置:"+raf.getFilePointer());//19
            raf.seek(0);//将指针移动到文件开始的位置
            System.out.println("当前指针位置:"+raf.getFilePointer());//0
            /**
             * num:00000000 00000000 00000000 00000000
             */
            int num = 0;//准备读取的int值
            int b = raf.read();//读取第一个字节 7f
            System.out.println("当前指针位置:"+raf.getFilePointer());//1
            num = num|(b<<24);//01111111 00000000 00000000 00000000
            b = raf.read();//读取第二个字节 ff
            num = num|(b<<16);//01111111 11111111 00000000 00000000
            b = raf.read();//读取第三个字节 ff
            num = num|(b<<8);//01111111 11111111 11111111 00000000
            b = raf.read();//读取第四个字节 ff
            num = num|b;//01111111 11111111 11111111 11111111
            System.out.println("int最大值"+num);//int最大值2147483647
            raf.seek(0);
            byte[] buf = new byte[1024];//1k的容量
            int sum = raf.read(buf);//尝试读取1k的数据
            System.out.println("总共读取了"+sum+"个字节");
            System.out.println(Arrays.toString(buf));
            raf.close();//写完了不再写了就关了
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读