内容目录
- 概述
- 4种模式
- 如何随机访问一部分数据
- 如何在指定位置追加一段数据
概述
RandomAccessFile ----- 自由访问文件任意位置
1、概念:RandomAccessFile是直接继承Object的独立的类,是用来访问那些保存数据记录的文件的,用seek( )方法来进行读写了。
public RandomAccessFile(String name, String mode)
2、方法
- file poniter — 文件指针 用来标记当前读取或写入的位置
- getFileponiter()— 返回当前文件指针的位置
- seek() — 设置当前文件指针的位置
4种模式
- r:只读模式
- rw:支持读取和写入
- rws:支持读取和写入,同时当我们修改文件内容和文件的元数据都会直接同步到存储设备上
- rwd:支持读取和写入,同时当我们修改文件内容会直接同步到存储设备上
PS:文件的元数据是什么?
文件的大小,访问权限,包括本身一些属性信息
随机访问文件中的某一部分数据
RandomAccessFile file = null;
try {
file = new RandomAccessFile("a.txt", "r");
file.seek(50);
System.out.println(file.getFilePointer());
byte[] bytes = new byte[256];
int hasRead = file.read(bytes);
System.out.println(new String(bytes, 0, hasRead));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
在指定位置去追加一段数据
PS:RandomAccessFile不能在任意位置去追加数据
public static void main(String[] args) {
RandomAccessFile raf = null;
File file = null;
FileOutputStream fos = null;
FileInputStream fis = null;
try {
//创建临时文件
File.createTempFile("test.txt", null);
//创建输入、输出流
fis = new FileInputStream("test.txt");
fos = new FileOutputStream("test.txt");
//创建RandomAccessFile对象
raf = new RandomAccessFile("a.txt", "rw");
//移动文件指针
raf.seek(50);
//读取该位置之后的数据,并把它写入到临时文件里
byte[] bytes = new byte[256];
int hasRead = 0;
while((hasRead = raf.read(bytes)) != -1){
fos.write(bytes, 0, hasRead);
}
//移动文件指针
raf.seek(50);
//往文件中指定位置追加内容
raf.write("tulun software company".getBytes());
//追加文件
while((hasRead = fis.read(bytes)) != -1){
raf.write(bytes, 0 , hasRead);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
raf.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}