RandomAccessFile类不属于流,是Object的子类,但它融合了流类InputStream和OutputStream的功能,即提供了InputStream类似的read()方法,又提供了OutputStream类似的write()方法,还提供了更高级的直接读写各种基本数据类型的读写方法;
RandomAccessFile类访问文件不需要从头读到尾,可以从文件的任意位置开始访问文件,这也是其他“流”类文件不具备之处 。
seek(long pos) 指定文件起始位置开始的指针偏移量,即设置读指针的位置
RandomAccessFile可使用的访问模式:
- “r” 以只读方式打开文件
- “rw” 打开以便读取和写入
- “rws” 打开以便读取和写入,还要求对文件的内容或元数据的每一个更新都同步写入到底层储存设备
- “rwd” 打开以便读取和写入,还要求对文件的内容的每一个更新都同步写入到底层储存设备
/**
* 合并两个文件
* @param a
* @param b
*/
private static void merge(File a, File b) {
try {
RandomAccessFile accs2 = new RandomAccessFile(b,"rw");
RandomAccessFile accs = new RandomAccessFile(a,"rw");
long x = a.length(); //获取文件长度
accs.seek(x); //移动读指针到最后字节位置
int tmp = 0;
while((tmp = accs2.read()) != -1) {
accs.write(tmp); //把b文件的字节读一个,往a文件插一个
}
} catch (IOException e) {
e.printStackTrace();
}
}
未运行前a、b文件:
运行程序后: