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();
}
    }
}

最新文章

  1. 13.final关键字
  2. [Ubuntu] ubuntu10.04系统维护之Wine的安装
  3. PHP下的命令行执行 php -S localhost -t public
  4. System.InvalidOperationException: Sequence contains no elements
  5. PCB中层的定义(一)
  6. js 全选 反选
  7. Java API ——Scanner类
  8. effective c++(07)之为多态基类声明virtual析构函数
  9. FastJSON应用前测试
  10. PowerDesigner连接MySQL和逆向工程图
  11. 解决MySQL在修改列时因为外键依赖出错的问题
  12. python 函数递归与匿名函数
  13. Android的onLayout、layout方法讲解
  14. 20155304《网络对抗》Exp2 后门原理与实践
  15. UNSIGNED command-line client
  16. Java动态代理的实现方法
  17. spring mvc中的一些注释:@PathVariable @RequestParam等
  18. jQuery 效果 - toggle() 方法切换元素的可见状态。
  19. 一维的Haar小波变换
  20. 初识Ant-Design

热门文章

  1. linux 下文件误删恢复
  2. Centos下出现read-only file system 的解决办法
  3. (转)FIDDER教程
  4. box-sizing position
  5. NVisionXR for ARCore内测版开放申请
  6. Linux常用命令大全(归类)
  7. React 关于组件(界面)更新
  8. Spring的注解@Qualifier小结
  9. 关于 printf scanf getchar
  10. node上传文件并在网页中展示