RandomAccessFile的用法

时间:2022-04-14 02:09:56

“r”:以只读的方式打开,调用该对象的任何write(写)方法都会导致IOException异常
“rw”:以读、写方式打开,支持文件的读取或写入。若文件不存在,则创建之。
“rws”:以读、写方式打开,与“rw”不同的是,还要对文件内容的每次更新都同步更新到潜在的存储设备中去。这里的“s”表示synchronous(同步)的意思
“rwd”:以读、写方式打开,与“rw”不同的是,还要对文件内容的每次更新都同步更新到潜在的存储设备中去。使用“rwd”模式仅要求将文件的内容更新到存储设备中,而使用“rws”模式除了更新文件的内容,还要更新文件的元数据(metadata),因此至少要求1次低级别的I/O操作

package test;
 
 
import java.io.*;
import java.sql.SQLClientInfoException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.zip.InflaterInputStream;
 
import javax.annotation.processing.FilerException;
import javax.management.RuntimeErrorException;

import privateclass.Filterby_Name;
import privateclass.Filterby_hidden;
import privateclass.Filterby_java;
import privateclass.MyBufferedReader;
import privateclass.Person;
 
public class Main {
 
    private static final String space_operator = " ";
    private static final double pi = Math.PI;
    private static final String LINE_SEPARATOR = System.getProperty("line.separator");
	private static final int SIZE = 1024*1024;

	/*
	 * RandomAccessFile具有随机读取和随机读入的属性
	  * 我们使用构造函数的时候
	  * 第二个参数值能是
	 *“r”:以只读的方式打开,调用该对象的任何write(写)方法都会导致IOException异常
	 *“rw”:以读、写方式打开,支持文件的读取或写入。若文件不存在,则创建之。
	 *“rws”:以读、写方式打开,与“rw”不同的是,还要对文件内容的每次更新都同步更新到潜在的存储设备中去。这里的“s”表示synchronous(同步)的意思
	 *“rwd”:以读、写方式打开,与“rw”不同的是,还要对文件内容的每次更新都同步更新到潜在的存储设备中去。使用“rwd”模式仅要求将文件的内容更新到存储设备中,而使用“rws”模式除了更新文件的内容,还要更新文件的元数据(metadata),因此至少要求1次低级别的I/O操作
	  * 我们可以用seek来设置指针的位置
	  * 我们可以用getFilePointer来获取指针的位置
	 */
    public static void main(String[] args) throws Exception {

    	RandomAccessFile raf = new RandomAccessFile("ran.txt","rw");
    	
    	//rafwrite(raf);
    	//rafread(raf);
    	randomwrite(raf);
    	
    	
    }
	public static void randomwrite(RandomAccessFile raf) throws IOException {
		raf.seek(3*8);
		raf.write("李四".getBytes());
		
		raf.writeInt(33);
		
	}
	public static void rafread(RandomAccessFile raf) throws IOException {
		
		//通过设置Pointer的位置来读取数据(随机性体现)
		raf.seek(1*8);
		byte buf[] = new byte[4];
		raf.read(buf);
		String name = new String(buf);
		int age = raf.readInt();
		//获取当前指针的位置
		System.out.println(raf.getFilePointer());
		System.out.println(name   "  "   age);
		
	}
	public static void rafwrite(RandomAccessFile raf) throws IOException {
		raf.write("张三".getBytes());
    	raf.writeInt(97);
    	
    	raf.write("小强".getBytes());
    	raf.writeInt(101);
	}
	
}