java - io - RandomAccessFile 源码走读

RandomAccessFile

RandomAccessFile 用于随机访问文件,这里的随机是指可以自动由移动读取文件内容的指针/位置(position),实现可进可退,可跳跃的访问文件内容。不像流,只能向前读写。另外 RandomAccessFile 即支持读操作,也支持读操作。

RandomAccessFile 有多种访问文件的模式(mode ):

r -> 1 只读
rw -> 2 读写
rws -> 6 读写,同步更新内容或元数据到底层设备。
rwd -> 8 读写,同步更新内容到底层设备。

相关方法

1、 构造方法:public RandomAccessFile(File file, String mode)
1)、文件路径合法校验。
2)、FileDescriptor -> 文件描述对象 -> useCount 占用计数 +1。
3)、private native void open(String name, int mode) -> 本地方法调用。

2、 获取 FileChannel :public final FileChannel getChannel()
1)、FileDescriptor -> 文件描述对象 -> useCount 占用计数 +1。

3、 获取1个字节,返回对应的 ASCII码(0~255),-1 则没有内容了 :public int read()
1)、private native int read0() -> 本地方法调用。

        //使用read读取文件
        int i;
        while((i= aFile.read())>0){
            System.out.print((char)i);  // ASCII码 转 字符
        }

4、 读取多个字节,返回读取到的字节数量,-1 则没有内容了: public int read(byte b[], int off, int len)

        //使用read读取文件
        int i=0;
        int len=0;
        byte[] b = new byte[10];

        while((len = aFile.read(b,0,b.length)) != -1){
            while(i<len){
                System.out.print((char)b[i]);
                i++;
            }
            i = 0;
        }

5、 读取一行,返回下一行,null 则是最后一行 : public final String readLine()

6、 读写中文:
1)、public final void writeUTF(String str)
2)、public final String readUTF()

        aFile.writeUTF("你好。\r\n");
        aFile.writeUTF("我也好。");

        String str = aFile.readUTF();
        while(str != null){
            System.out.println(str);
            if (aFile.length() != aFile.getFilePointer()){
                str = aFile.readUTF();
            }else{
                str = null;
            }
        }

7、 向前跳过多个字节,返回跳过的数量 : public int skipBytes(int n)
1)、public native void seek(long pos) –> 本地方调用。

8、 在当前的位置,写入1个字节(有则覆盖) : public void write(int b)
1)、private native void write0(int b) –> 本地方调用。

9、 在当前的位置,写入字节数组(有则覆盖): public void write(byte b[])
aFile.write(“1 “.getBytes());

10、在当前的位置,写入字节数组部分(有则覆盖) : public void write(byte b[], int off, int len)
aFile.write(“1 t”.getBytes(),0,2);

11、 获取当前的位置 : public native long getFilePointer()

12、 跳到特定位置 : public native void seek(long pos)

13、 获取文件的字节数(大小) : public native long length()

14、 设置只读取文件的长度,之后有内容都不读 : public native void setLength(long newLength)

15、 关闭文件 : public void close()
1)、关闭 channel , 文件描述对象 -> useCount 占用计数 -1。
2)、关闭文件,调用本地方法, 文件描述对象 -> useCount 占用计数 -1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值