首页 > 代码库 > RandomAccessFile
RandomAccessFile
RandomAccessFile 是不属于 InputStream 和 OutputStream 类系的(既可以输入也可以输出),它的唯一父类是 Object
RandomAccessFile 类支持“随机访问”的方式,程序可以直接跳到文件的任意地方来读、写文件(其实我更愿意叫它“随意访问”)
----支持只访问文件的部分内容
----可以向已存在的文件后追加内容
RandomAccessFile 对象包含一个记录指针,用以标示当前读写处的位置。RandomAccessFile
类对象可以自由移动记录指针:
long
getFilePointer():获取文件记录指针的当前位置
void
seek(long pos):将文件记录指针定位到
pos位置
创建 RandomAccessFile
类实例需要指定一个
mode参数,该参数指定
RandomAccessFile
的访问模式:
r:以只读方式打开
rw:打开以便读取和写入
rwd:打开以便读取和写入,同步文件内容的更新
rws:打开以便读取和写入,同步文件内容和元数据的更新
JDK 1.4后很多 RandomAccessFile 的功能被转到“内存映射文件”里了,可以考虑使用 memory-mapped files
下面举例说明(注意:直接在指针后 write 将会是覆盖操作,这里只演示插入操作)
// 文本文件的复制(实现读写)
@Test
public void test1() {
RandomAccessFile rafin = null;
RandomAccessFile rafout = null;
try {
rafin = new RandomAccessFile("C:/Users/59929/Desktop/test1.txt", "r");
rafout = new RandomAccessFile("C:/Users/59929/Documents/test.txt", "rw");
int len;
byte[] b = new byte[1024];
while ((len = rafin.read(b)) != -1) {
rafout.write(b, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (rafout != null) {
try {
rafout.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (rafin != null) {
try {
rafin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
// 实现文本文件的插入操作
@Test
public void test2() {
RandomAccessFile raf = null;
try {
raf = new RandomAccessFile("C:/Users/59929/Desktop/test2.txt", "rw");
System.out.println("现在指针位置为:" + raf.getFilePointer());
raf.seek(16);
System.out.println("移到要修改的位置,现在指针位置为:" + raf.getFilePointer());
int len;
byte[] b = new byte[10];
StringBuffer sb = new StringBuffer();
while ((len = raf.read(b)) != -1) {
sb.append(new String(b, 0, len));
}
System.out.println("读完后现在指针位置为:" + raf.getFilePointer());
raf.seek(16);
System.out.println("再次移到要修改的位置,现在指针位置为:" + raf.getFilePointer());
raf.write("c".getBytes());
raf.write(sb.toString().getBytes());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (raf != null) {
try {
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
RandomAccessFile
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。