RandomAccessFile类:实例支持对随机访问文件的读取和写入。
常用方法:
RandomAccessFile(File file, String mode) ,创建从中读取和向其中写入(可选)的随机访问文件流,该文件由 File 参数指定。
RandomAccessFile(String name, String mode) , 创建从中读取和向其中写入(可选)的随机访问文件流,该文件具有指定名称。
参数mode可写的值:
"r" 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。
"rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
"rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
"rwd" 打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。
long getFilePointer() , 返回此文件中的当前偏移量。
long length() , 返回此文件的长度。
int read() ,从此文件中读取一个数据字节。
int read(byte[] b) ,将最多 b.length 个数据字节从此文件读入 byte 数组。
int read(byte[] b, int off, int len) ,将最多 len 个数据字节从此文件读入 byte 数组。
int readInt() ,从此文件读取一个有符号的 32 位整数。
String readLine() ,从此文件读取文本的下一行。
void write(byte[] b) ,将 b.length 个字节从指定 byte 数组写入到此文件,并从当前文件指针开始。
void write(byte[] b, int off, int len) ,将 len 个字节从指定 byte 数组写入到此文件,并从偏移量 off 处开始。
void write(int b),向此文件写入指定的字节。
void seek(long pos) ,设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。
void setLength(long newLength),设置此文件的长度。
常用方法:
RandomAccessFile(File file, String mode) ,创建从中读取和向其中写入(可选)的随机访问文件流,该文件由 File 参数指定。
RandomAccessFile(String name, String mode) , 创建从中读取和向其中写入(可选)的随机访问文件流,该文件具有指定名称。
参数mode可写的值:
"r" 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。
"rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
"rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
"rwd" 打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。
long getFilePointer() , 返回此文件中的当前偏移量。
long length() , 返回此文件的长度。
int read() ,从此文件中读取一个数据字节。
int read(byte[] b) ,将最多 b.length 个数据字节从此文件读入 byte 数组。
int read(byte[] b, int off, int len) ,将最多 len 个数据字节从此文件读入 byte 数组。
int readInt() ,从此文件读取一个有符号的 32 位整数。
String readLine() ,从此文件读取文本的下一行。
void write(byte[] b) ,将 b.length 个字节从指定 byte 数组写入到此文件,并从当前文件指针开始。
void write(byte[] b, int off, int len) ,将 len 个字节从指定 byte 数组写入到此文件,并从偏移量 off 处开始。
void write(int b),向此文件写入指定的字节。
void seek(long pos) ,设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。
void setLength(long newLength),设置此文件的长度。
int skipBytes(int n),尝试跳过输入的 n 个字节以丢弃跳过的字节。
演示:
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
public static void main(String[] args) {
// fun1();
fun2();
}
//使用RandomAccessFile写文件
public static void fun1(){
RandomAccessFile raf = null;
try {
// 参数二mode,表示造作的形式,rw表示读写的方法
raf = new RandomAccessFile("F:\\Random.txt", "rw");
raf.writeBoolean(false); //1个字节
raf.writeDouble(8.5); //8个字节
raf.writeInt(5); //4个字节
System.out.println("写入成功");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
//关闭流
if(raf != null){
try {
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//使用RandomAccessFile读取文件
public static void fun2(){
RandomAccessFile raf = null;
try {
// 参数二mode,表示造作的形式,rw表示读写的方法
raf = new RandomAccessFile("F:\\Random.txt", "rw");
raf.seek(1); //跳过boolean类型
System.out.println(raf.readDouble()); //读取Double类型的值
raf.setLength(9); //设置文件的长度,设置的长度小于现在的文件长度会舍弃多出的部分
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
//关闭流
if(raf != null){
try {
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}