1、RandomAccessFile概念
2、RandomAccessFile实现数据的读写操作
public class RandomAccessFileTest {
@Test
public void test(){
RandomAccessFile raf = null;
RandomAccessFile raf1 = null;
try {
//1、
raf = new RandomAccessFile(new File("bird.png"),"r");
raf1 = new RandomAccessFile(new File("bird1.png"),"rw");
//2、
byte[] buffer = new byte[1024];
int len;
while((len=raf.read(buffer))!=-1){
raf1.write(buffer,0,len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(raf!=null){
try {
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(raf1!=null){
try {
raf1.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
//如果RandomAccessFile作为输出流时,写出到的文件hello.txt如果不存在,则执行过程中会自动创建;如果写出到的文件存在,则会对原有文件内容进行覆盖(从文件开头开始覆盖内容)。
@Test
public void test02() throws IOException {
RandomAccessFile raf = new RandomAccessFile("hello.txt","rw");
raf.write("xyz".getBytes());
raf.close();
}
hello.txt文件已创建,内容如下。执行上述操作之前的hello.txt
执行上述操作之后的hello.txt。文件内容被从头覆盖
3、RandomAccessFile实现数据的插入操作
/**
* 使用RandomAccessFile实现数据的插入操作
*/
@Test
public void test04() throws IOException {
RandomAccessFile raf = new RandomAccessFile("hello.txt","rw");
raf.seek(3);//将指针调到角标为3的位置
// 保存指针3后面的所有数据存到StringBuilder中
StringBuilder builder = new StringBuilder((int) new File("hello.txt").length());
byte[] buffer = new byte[20];
int len;
while((len=raf.read(buffer))!=-1){
builder.append(new String(buffer,0,len));
}
//调回指针,写入“xyz"
raf.seek(3);
raf.write("xyz".getBytes());
//将StringBuilder中的数据写入到文件中
raf.write(builder.toString().getBytes());
raf.close();
}
执行插入操作前的hello.txt文件
执行插入操作后的hello.txt文件