时间:2021-07-01 10:21:17 帮助过:23人阅读
|
构造方法摘要 |
|
|
RandomAccessFile(File file, String mode) |
|
|
RandomAccessFile(String name, String mode) |
|
Mode:操作模式
"r" 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。
"rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
"rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
"rwd" 打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。
如果模式为r(只读),不会创建文件,如果文件不存在会出现异常
如果模式为rw,文件不存在会自动创建,如果存在则不会覆盖
RandomAccessFile支持从任意位置读写文件,这种特性非常符合多线程下载的原理。
假设一个文件大小为20,那么开4个线程,每个线程下载5
0--5
6--10
11-15
16--20
创建RandomAccessFile对象:
RandomAccessFile raf = new RandomAccessFile("data.txt", "rw");
读写方法:
raf.write("张三".getBytes());
raf.writeInt(97);
byte buff[] = new byte[4];
raf.read(buff);
调整对象中指针
raf.seek(8);
跳过指定的字节数
raf.skipBytes(8);
举个栗子:
public class RandomAccessFileDemo {
public static void main(String[] args) throws Exception {
writeFile();//
// readFile();
// writeFile2();// 从指定位置开始写文件
writeFile3();// 从原文件中间开始写文件,会覆盖当前指针之后的同等长度内容
}
private static void writeFile3() throws Exception {
RandomAccessFile raf = new RandomAccessFile("data.txt", "rw");
// seek 和 skipBytes 两个方法都会覆盖之后的内容
// raf.seek(8);
raf.skipBytes(8);
raf.write("老李".getBytes());
raf.write(102);
raf.close();
}
public static void writeFile2() throws Exception {
RandomAccessFile raf = new RandomAccessFile("data.txt", "rw");
// 从24个字节之后开始写
raf.seek(8 * 3);
raf.write("周期".getBytes());
raf.write(103);
}
public static void readFile() throws Exception {
RandomAccessFile raf = new RandomAccessFile("data.txt", "r");
// raf.write("hahaha".getBytes());
// 调整对象中指针
// raf.seek(8);
// 从第8个字节开始读文件,读出来的是李斯
// 跳过指定的字节数
// raf.skipBytes(8);
byte buff[] = new byte[4];
raf.read(buff);
String s = new String(buff);
System.out.println("name = " + s);
int age = raf.readInt();
System.out.println("age = " + age);
raf.close();
}
public static void writeFile() throws Exception {
RandomAccessFile raf = new RandomAccessFile("data.txt", "rw");
raf.write("张三".getBytes());
raf.writeInt(97);
raf.write("李斯".getBytes());
raf.writeInt(99);
raf.close();
}
}
Java---31---RadnomAccessFile
标签:java randomaccessfile