RandomAccessFile是随机访问(读写)的类,支持对文件随机访问的读取和写入,也可以从指定的位置读取和写入文件数据。RandomAccessFile虽然属于java.io包,但它不是InputStream或者OutputStream的子类,也不同于FileInputStream和FileOutputStream。

RandomAccessFile函数列表:
RandomAccessFile(File file, String mode)
RandomAccessFile(String fileName, String mode)

void     close()
synchronized final FileChannel     getChannel()
final FileDescriptor     getFD()
long     getFilePointer()
long     length()
int     read(byte[] buffer, int byteOffset, int byteCount)
int     read(byte[] buffer)
int     read()
final boolean     readBoolean()
final byte     readByte()
final char     readChar()
final double     readDouble()
final float     readFloat()
final void     readFully(byte[] dst)
final void     readFully(byte[] dst, int offset, int byteCount)
final int     readInt()
final String     readLine()
final long     readLong()
final short     readShort()
final String     readUTF()
final int     readUnsignedByte()
final int     readUnsignedShort()
void     seek(long offset)
void     setLength(long newLength)
int     skipBytes(int count)
void     write(int oneByte)
void     write(byte[] buffer, int byteOffset, int byteCount)
void     write(byte[] buffer)
final void     writeBoolean(boolean val)
final void     writeByte(int val)
final void     writeBytes(String str)
final void     writeChar(int val)
final void     writeChars(String str)
final void     writeDouble(double val)
final void     writeFloat(float val)
final void     writeInt(int val)
final void     writeLong(long val)
final void     writeShort(int val)
final void     writeUTF(String str)
RandomAccessFile共有4种模式:“r”,"rw",“rws”和“rwd”
(1)r 只读方式打开,调用write会抛出IOException
(2)rw以读写方式打开
(3)rws以读写方式打开,同时要求对文件的内容或元数据的每个更新都同步写到基础设备中。
(4)rwd以读写方式打开,同时要求对文件的内容的每个更新都同步写到基础存储设备中

示例代码:
public class RandomAccessFileTest {

private static final String FileName = "file.txt";

    public static void main(String[] args) {
// 若文件“file.txt”存在,则删除该文件。
File file = new File(FileName);
        if (file.exists())
            file.delete();

testCreateWrite();
testAppendWrite();
testRead();
}

/**
    * 若“file.txt”不存在的话,则新建文件,并向文件中写入内容
*/
private static void testCreateWrite() {
try {
// 创建文件“file.txt”对应File对象
File file = new File(FileName);
// 创建文件“file.txt”对应的RandomAccessFile对象
RandomAccessFile raf = new RandomAccessFile(file, "rw");

// 向“文件中”写入26个字母+回车
raf.writeChars("abcdefghijklmnopqrstuvwxyz\n");
// 向“文件中”写入"9876543210"+回车
raf.writeChars("9876543210\n");
raf.close();
} catch(IOException e) {
            e.printStackTrace();
}
    }

/**
    * 向文件末尾追加内容
*/
private static void testAppendWrite() {
try {
// 创建文件“file.txt”对应File对象
File file = new File(FileName);
// 创建文件“file.txt”对应的RandomAccessFile对象
RandomAccessFile raf = new RandomAccessFile(file, "rw");

// 获取文件长度
long fileLen = raf.length();
// 将位置定位到“文件末尾”
raf.seek(fileLen);
// 以下向raf文件中写数据
raf.writeBoolean(true); // 占1个字节
raf.writeByte(0x41);    // 占1个字节
raf.writeChar('a');     // 占2个字节
raf.writeShort(0x3c3c); // 占2个字节
raf.writeInt(0x75);     // 占4个字节
raf.writeLong(0x1234567890123456L); // 占8个字节
raf.writeFloat(4.7f);  // 占4个字节
raf.writeDouble(8.256);// 占8个字节
raf.writeUTF("UTF严"); // UTF-8格式写入
raf.writeChar('\n');   // 占2个字符。“换行符”

raf.close();
} catch(IOException e) {
            e.printStackTrace();
}
    }

/**
    * 通过RandomAccessFile读取文件
*/
private static void testRead() {
try {
// 创建文件“file.txt”对应File对象
File file = new File(FileName);
// 创建文件“file.txt”对应的RandomAccessFile对象,以只读方式打开
RandomAccessFile raf = new RandomAccessFile(file, "r");

// 读取一个字符
char c1 = raf.readChar();
System.out.println("c1="+c1);
// 读取一个字符
char c2 = raf.readChar();
System.out.println("c2="+c2);

// 跳过54个字节。
raf.seek(54);

// 测试read(byte[] buffer, int byteOffset, int byteCount)
byte[] buf = new byte[20];
raf.read(buf, 0, buf.length);
System.out.println("buf="+(new String(buf)));

raf.close();
} catch(IOException e) {
            e.printStackTrace();
}
    }
}

Java-IO之RandomAccessFile的更多相关文章

  1. Java IO的RandomAccessFile的使用(转)

    现有如下的一个需求,向已存在1G数据的txt文本里末尾追加一行文字,内容如下“Lucene是一款非常优秀的全文检索库”.可能大多数朋友会觉得这个需求很easy,说实话,确实easy,然后XXX君开始实 ...

  2. Java—IO流 RandomAccessFile类

    RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件. 支持随机访问文件,可以访问文件的任意位置. java文件模型,在硬盘上的文件是byte byte byt ...

  3. Java IO 之 RandomAccessFile 操作文件内容

    RandomAccessFile类实现对文件内容的随机读写 文件内容的随机操作,重难点在于字符操作,具体查看API package org.zln.io.file; import java.io.IO ...

  4. Java IO学习--RandomAccessFile

    1.什么是 随机访问文件流 RandomAccessFile 这个类在很多资料上翻译成中文都是:随机访问文件,在中文里,随机是具有不确定的含义,指一会访问这里,一会访问那里的意思.如果以这种语义来解释 ...

  5. Java IO(二)--RandomAccessFile基本使用

    RandomAccessFile: 翻译过来就是任意修改文件,可以从文件的任意位置进行修改,迅雷的下载就是通过多个线程同时读取下载文件.例如,把一个文件分为四 部分,四个线程同时下载,最后进行内容拼接 ...

  6. Java IO系统--RandomAccessFile

    RandomAccessFile 实现了DataOutput接口和DataInput接口.父类是Object,不继承任何的InputStream和OutStram. public class Rand ...

  7. java io系列26之 RandomAccessFile

    本文主要介绍 RandomAccessFile. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_26.html 更多内容请参考:java io系列0 ...

  8. Java IO流学习

    Java IO流学习 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是 ...

  9. [Java IO]01_File类和RandomAccessFile类

    File类 File类是java.io包中唯一对文件本身进行操作的类.它可以进行创建.删除文件等操作.   File类常用操作 (1)创建文件 可以使用 createNewFille() 创建一个新文 ...

  10. Java IO RandomAccessFile 任意位置读/写

    随机读写类 RandomAccessFile的唯一父类是Object,与其他流父类不同.是用来访问那些保存数据记录的文件的,这样你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必 ...

随机推荐

  1. Delphi 打印 Tprinter

    打印          打印对于许多 Windows 程序员来说是十分棘手的问题. Delphi 简化了打印时用户所必须了解的大部分内容.用户可以很轻松地写出简单的打印程序来输出文本和位图化了的图像. ...

  2. 浅谈Trie树(字典树)

          Trie树(字典树) 一.引入 字典是干啥的?查找字的. 字典树自然也是起查找作用的.查找的是啥?单词. 看以下几个题: 1.给出n个单词和m个询问,每次询问一个单词,回答这个单词是否在单 ...

  3. Intellij Error:Cannot build Artifact 'XXX:war exploded' because it is included into a circular dependency

    外网的流程是这样的. 1: 2: 3: 4: 基本按这个来就好了 如果到了build artfact哪里按钮是灰色 就要手动建了 https://jingyan.baidu.com/album/0a5 ...

  4. Tomcat常用参数的配置

    1.修改端口号 Tomcat端口配置在server.xml文件的Connector标签中,默认为8080,可根据实际情况修改. 修改端口号 2.解决URL中文参数乱码 在server.xml文件的Co ...

  5. 日历类和日期类转换 并发修改异常 泛型的好处 *各种排序 成员和局部变量 接口和抽象类 多态 new对象内存中的变化

    day07 ==和equals的区别? ==用于比较两个数值 或者地址值是否相同.  equals 用于比较两个对象的内容是否相同   String,StringBuffer.StringBuilde ...

  6. python学习之路网络编程篇(第二篇)

    新课程知识的引入:python作用域 #python中无块级别作用域 if 1 == 1 : name = 'alex' print(name) for i in range(10): name = ...

  7. oracle查询相关语句

    1,查询表空间使用情况select a.a1 表空间名称,c.c2 类型,c.c3 区管理,b.b2/1024/1024 表空间大小M,(b.b2-a.a2)/1024/1024 已使用M,subst ...

  8. sshpass笔记

    sshpass简介 ssh登录的时候使用的是交互式输入,不能预先在命令行使用参数指定密码,sshpass就是为了解决这个问题的.sshpass提供非交互式输入密码的方式,可以用在shell脚本中自动输 ...

  9. MongoDB $type条件操作符

    描述 在本章节中,我们将继续讨论MongoDB中条件操作符 $type. $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果. MongoDB 中可以使用的类型如下表所示: 类型 ...

  10. Java日志-Log4j2

    Log4j2参考资料 Log4j2 官方配置文档 1. Log4j2基本概念: Logger 在代码中产生日志信息的.比如logger.info("some log message" ...