


- RandomAccessFile 的使用
  1.RandomAccessFile直接继承于java.lang.Object类,实现了DataInput 和 DataOutput接口
  
  2.RandomAccessFile既可以作为一个输入流,又可以作为一个输出流
  
  3.如果RandomAccessFile作为输出流时,写出到的文件如果不存在,则在执行过程中自动创建
    如果写出到的文件存在,则会对原有文件内容进行覆盖。(默认情况下,从头覆盖)
 
  4.可以通过相关操作,实现RandomAccessFile“插入”数据的效果
 * 
package com.atguigu;import com.sun.org.apache.xpath.internal.operations.String;import org.junit.Test;import java.io.File;import java.io.IOException;import java.io.RandomAccessFile;/** * RandomAccessFile 的使用 * 1.RandomAccessFile直接继承于java.lang.Object类,实现了DataInput 和 DataOutput接口 *  * 2.RandomAccessFile既可以作为一个输入流,又可以作为一个输出流 *  * 3.如果RandomAccessFile作为输出流时,写出到的文件如果不存在,则在执行过程中自动创建 *   如果写出到的文件存在,则会对原有文件内容进行覆盖。(默认情况下,从头覆盖) * * 4.可以通过相关操作,实现RandomAccessFile“插入”数据的效果 * * * @author Dxkstart * @create 2021-06-03 16:16 */public class RandomAccessFile_Test {    @Test    public void test1() {        RandomAccessFile raf1 = null;        RandomAccessFile raf2 = null;        try {            //1.            raf1 = new RandomAccessFile(new File("爱丽丝1.jpg"), "r");            raf2 = new RandomAccessFile(new File("爱丽丝2.jpg"), "rw");            //2.            byte[] buffer = new byte[1024];            int len;            while ((len = raf1.read(buffer)) != -1) {                raf2.write(buffer, 0, len);            }        } catch (IOException e) {            e.printStackTrace();        } finally {            //3.            try {                if(raf1 != null) {                    raf1.close();                }            } catch (IOException e) {                e.printStackTrace();            }            try {                if(raf2 != null) {                    raf2.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }    }    @Test    public void test2() throws IOException {        RandomAccessFile raf1 = new RandomAccessFile(new File("hello.txt"),"rw");        raf1.seek(3);//将指针调到角标为3的位置        raf1.write("ppp".getBytes());        raf1.close();    }    /*    使用RandomAccessFile实现插入数据的效果     */    @Test    public void test3() throws IOException {        RandomAccessFile raf1 = new RandomAccessFile(new File("hello.txt"),"rw");        raf1.seek(3);//将指针调到角标为3的位置        //保存指针3后面的所有数据到StringBuilder中        StringBuilder builder = new StringBuilder((int) new File("hello.txt").length());        byte[] buffer = new byte[20];        int len;        while((len = raf1.read(buffer)) != -1 ){           builder.append(new String());//????? new String(buffer,0,len)        }        //调回指针,写入“ppp”        raf1.seek(3);        raf1.write("ppp".getBytes());        //将StringBuilder中的数据写入到文件中        raf1.write(builder.toString().getBytes());        raf1.close();    }}