java -- RandomAccessFile

RandomAccessFile同时实现了DataInputDataOutput接口,因此可以用它来读写文件。它的构造方法如下:

a、RandomAccessFile(java.io.Filef, String mode):接受一个File类型的对象,以及一个String类型的读写模式mode,给mode常用的有“r”(只读)和“rw”(读写)。

b、RandomAccessFile(String file,String mode):接收两个String类型的参数,前面一个用于指定文件,后面一个参数用于指定读写模式。

常用方法:

a.int read():从此文件中读取一个数据字节。

b.int read(bute[] b): 将最多b.length个数据字节从此文件读入byte 数组。

c.void write(int b): 向此文件写入指定的字节。

d.void seek(long pos): 设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。

e.long getFilePointer():返回此文件中的当前偏移量。

f.int skipbytes(int n):  尝试跳过输入的n个字节以丢弃跳过的字节。


示例1RandomAccessFile读写文件

public class Test01 {
    public static void main(String[] args) throws Exception {
        // File.separator:根据当前系统获取分隔符
        File file = new File("d:" + File.separator + "sh.txt");
        RandomAccessFile raf = new RandomAccessFile(file, "rw");               
        System.out.println("当前指针位置:"+raf.getFilePointer());
        //写入数据,同时指针向后移动一位。
        raf.write(97); 
        System.out.println("当前指针位置:"+raf.getFilePointer());
        //将指针定位到0
        raf.seek(0);
        System.out.println("当前指针位置:"+raf.getFilePointer());
        //raf.read()读取文件信息。同时指针又向后移动一位
        System.out.println(raf.read());
        System.out.println("当前指针位置:"+raf.getFilePointer());
    }
}

运行结果:

当前指针位置:0

当前指针位置:1

当前指针位置:0

97

当前指针位置:1


示例2:求一张bmp格式的图片的反色

public class TestRandom {
    public static void main(String[] args) throws Exception {
        File file = new File("D:/splash.bmp");
        RandomAccessFile raf = new RandomAccessFile(file, "rw");
        //跳过前54个字节
        raf.skipBytes(54);
        //循环改变每个像素的颜色
        while (true) {
            int i = 255 - raf.read();
            raf.seek(raf.getFilePointer() - 1);
            raf.write(i);
            //当指针到底文件末尾是结束循环
            if (raf.getFilePointer() >= raf.length() - 1) {
                break;
            }
        }
    }
}

结果:图片由第一张的效果变为第二张图片的效果


你可能感兴趣的:(java -- RandomAccessFile)