RandomAccessFile,read,write,复制文件,指针,批量读写,基本类型读写

来源:互联网 发布:网络推广团队遇见 编辑:程序博客网 时间:2024/05/18 15:53
//(1)read------------------public class RandomAccessFileRead {    public static void main(String[] args) throws IOException {        RandomAccessFile raf = new RandomAccessFile("demo.dat","r");        /**         * 从当前文件中读取一个字节         * 将该字节存入返回的int值中         * int值“低8位”有效(前24位都是0)         *          * 若返回值为-1,说明读取到文件的末尾         * EOF end of file         */        int i = raf.read();        System.out.println(i);        i = raf.read();        System.out.println(i);        i = raf.read();        System.out.println(i);        raf.close();    }}//(2)write-----------------------------------/** * RandomAccessfile:用于读写文件数据的类 * 是在当前指定的位置读写字节 */public class RandomAccessFileWrite {    public static void main(String[] args) throws IOException {        /**         * 对项目根目录下的demo.dat文件进行读写         */        RandomAccessFile raf = new RandomAccessFile("demo.dat","rw");//读写"rw"或只读"r",没有只写        /*         * 以下方式也可            File file = new File("demo.dat");            RandomAccessFile raf2 = new RandomAccessFile(file,"rw");         */        /**         * void write(int n)         * 写出给定int值的“低8位”,即最后8位二进制数         * 只写一个字节         */        //int num = 256;//100000000        int num =255;//11111111        System.out.println(Integer.toBinaryString(num));        raf.write(num);//从最开始写,覆盖之前的内容        raf.write(1);        num =-1;        System.out.println(Integer.toBinaryString(num));//11111111111111111111111111111111        raf.write(num);//11111111        raf.close();//使用IO后,一定要记得关闭    }}//(3)RandomAccessFile 文件复制-----------------------public class RandomAccessFileCopy {    public static void main(String[] args) throws IOException {        RandomAccessFile src = new RandomAccessFile("src.txt","r");        RandomAccessFile des = new RandomAccessFile("copy.txt","rw");        int d = -1;        while((d=src.read())!=-1){            des.write(d);        }        src.close();        des.close();    }}//(4)获得指针getFilePoint,移动指针seek----------public class RandomAccessFileDemo {    public static void main(String[] args) throws IOException {        RandomAccessFile raf = new RandomAccessFile("raf.dat","rw");        /**         * long getFilePoint()         * 获得当前RAF的指针位置         */        long p = raf.getFilePointer();        System.out.println(p);//0        raf.write(97);//写一个字节        System.out.println(raf.getFilePointer());//1        raf.writeInt(1);//连续写4个字节        System.out.println(raf.getFilePointer());//5        System.out.println(raf.read());//-1,读取一个字节,文件的末尾        /**         * 若想从某个地方读取字节,需要移动指针         * void seek(long position),将指针移动到某个位置         */        raf.seek(0);        System.out.println(raf.read());//97    }}//(5)指针往后跳skipBytes-----------------public class RandomAccessFileDemo2 {    /**     * int skipBytes(int n)     * 该方法会跳过n个字节,     * 返回值为实际跳过的字节数     * 只能往后跳,不能往前跳     */    public static void main(String[] args) throws IOException {        RandomAccessFile raf = new RandomAccessFile("raf.dat","r");        int i = raf.skipBytes(1);        System.out.println(i);        System.out.println(raf.read());    }}/** * //(6)-------------- * 读写数据时,若想提高读写效率, * 就必须减少读写次数 */public class RandomAccessFileDemo4 {/** * 批量写出一组字节 * @throws IOException  */    public static void main(String[] args) throws IOException {        RandomAccessFile raf = new RandomAccessFile("t.txt","rw");        String str = "我";//内存里是unicode编码,2字节        /**         * String的getBytes()方法:         * 将当前的字符串按照系统默认的字符集转为对应的字节         *          * UTF-8:中文占3个字节,英文一个字节         * GBK:中文2个字节,英文一个         */        //内存里是内存里是unicode编码,2字节,java去UTF-8编码里去找“我”的编码        byte[] buf = str.getBytes("UTF-8");        raf.write(buf);//结果:t.txt为3个字节        raf.close();    }}//(7)批量读取数据---------public class RandomAccessFileDemo57 {    public static void main(String[] args) throws IOException {        RandomAccessFile raf = new RandomAccessFile("t.txt","r");        /**         * int read(byte[] buf)         * 一次从文件中读取buf数组length个字节         * 并从该数组的第一个位置处起存放实际读取到的字节         * 返回值为实际读取到的字节数         */        byte[] buf = new byte[50];        int length = raf.read(buf);        System.out.println(length);//3,因为"我"在utf-8编码里占3个字节        System.out.println(Arrays.toString(buf));        //[-26, -120, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]    }}//(8)每次读写10K复制文件--------public class RandomAccessFileDemo68 {    public static void main(String[] args) throws IOException {        RandomAccessFile src = new  RandomAccessFile("src.jpg","r");        RandomAccessFile des = new RandomAccessFile("copy.jpg","rw");        byte[] buf = new byte[10240];//10K        int len = -1;        while((len=src.read(buf))!=-1){            des.write(buf);        }        src.close();        des.close();    }}//(9)向文件中写入基本类型数据-----------------public class RandomAccessFileDemo79 {    public static void main(String[] args) throws IOException {        RandomAccessFile raf = new RandomAccessFile("raf.dat","rw");        int num = Integer.MAX_VALUE;        //将int写入文件        /**         * 01111111 11111111 11111111 11111111         * num>>>24:右移24位,前面补0         *          * write()写的是低8位         */        raf.write(num>>>24);        raf.write(num>>>16);        raf.write(num>>>8);        raf.write(num);        raf.writeInt(num);//这句等价于上面4句        raf.writeDouble(1.42);        raf.writeLong(123);        int i = raf.readInt();        System.out.println(i);        raf.close();    }}
1 0
原创粉丝点击