zoukankan      html  css  js  c++  java
  • RandomAccessFile

    RandomAccessFile

    RandomAccessFile是java语言中最丰富的文件访问类。RandomAccessFile类支持随机访问方式,可以跳转到文件的任意位置读写数据。如果不想把文件从头读到尾,而是希望像访问数据库一样访问一个文本文件,使用RandomAccessFile类最好了。

    这个类中有个位置指示器,指向当前读写处,当读写n个字节后,文件指示器指向这n个字节后的下一个字节处。刚打开文件时,文件指示器指向文件的开头处,可以移动文件指示器到新位置,随后的读写从新位置开始。

    这个类在文件随机读取时有很大的优势,但是仅限于操作文件,不能访问其他io设备,比如网络,内存映像等。

    RandomAccessFile构造方法

    RandomAccessFile类为用户提供了两种构造方法:

    1、RandomAccessFile(File file, String mode)

    2、RandomAccessFile(String name, String mode)

    其实第二种构造方法也是new一个File出来再调用第一种构造方法,建议使用第一种构造方法,File是IO的基础,有一个File不仅仅可以通过RandomAccessFile对文件进行操作,也可以通过File对象对文件进行操作。至于mode,Java给开发者提供了四种mode:

    模    式 作    用
    r 表示以只读方式打开,调用结果对象的任何write方法都将导致抛出IOException
    rw 打开以便读取和写入,如果该文件尚不存在,则尝试创建该文件
    rws 打开以便读取和写入,相对于"rw",还要求对文件内容或元数据的每个更新都同步写入到底层存储设备
    rwd 打开以便读取和写入,相对于"rw",还要求对文件内容的每个更新都同步写入到底层存储设备

    注意第二点"rw"模式,对rw模式的解释意味着Java并不强求指定的路径下一定存在某个文件,假如文件不存在,会自动创建。

    RandomAccessFile中的方法

    RandomAccessFile中有如下一些常用方法:

    方    法 作    用
    void close() 重要,关闭此随机访问文件流并释放与该流关联的所有系统资源
    FileChannel getChannel() 返回与此文件关联的唯一FileChannel对象,NIO用到
    long getFilePointer() 返回此文件中的当前偏移量
    long length() 返回此文件的长度
    int read() 从此文件中读取一个数据字节
    int read(byte[] b) 将最多b.length个数据字节从此文件读入byte数组,返回读入的总字节数,如果由于已经达到文件末尾而不再有数据,则返回-1。在至少一个输入字节可用前,此方法一直阻塞
    int read(byte[] b, int off, int len) 将最多len个数据字节从此文件的指定初始偏移量off读入byte数组
    boolean readBoolean() 从此文件读取一个boolean,其余readByte()、readChar()、readDouble()等类似
    String readLine() 从此文件读取文本的下一行
    void seek(long pos) 重要,设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作
    int skipBytes(int n) 重要,尝试跳过输入的n个字节以丢弃跳过的字节,返回跳过的字节数
    void write(byte[] b) 将b.length个字节从指定byte数组写入到此文件中
    void write(byte[] b, int off, int len) 将len个字节从指定byte数组写入到此文件,并从偏移量off处开始
    void write(int b) 向此文件写入指定的字节
    void writeBoolean(boolean v) 按单字节值将boolean写入该文件,其余writeByte(int v)、writeBytes(String s)、writeChar(int v)等都类似
  • 相关阅读:
    time 模块学习
    day 14 自定义模块,常用模块 time .datetime ,time 模块
    day 13 课后作业
    day 12 课后作业
    day 11课后作业
    树状数组最值
    hdu 1059 Dividing bitset 多重背包
    XVII Open Cup named after E.V. Pankratiev. XXI Ural Championship
    最长公共子序列板/滚动 N^2
    Uva 10635
  • 原文地址:https://www.cnblogs.com/tp123/p/6430395.html
Copyright © 2011-2022 走看看