当前位置: 代码迷 >> 综合 >> Java基础 -> RandomAccessFile(可读又可取,可输入可输出的处理流,属于字节流),附加指定位置插入数据
  详细解决方案

Java基础 -> RandomAccessFile(可读又可取,可输入可输出的处理流,属于字节流),附加指定位置插入数据

热度:99   发布时间:2023-12-16 10:09:02.0
/*** RandomAccessFile:既可以读又可以取的流,继承于字节流* mode:* r---只读(输入),不能自己创建文件* rw---读取(输入输出),会创建文件* rwd---读取(输入输出),可更新* txt和png都可以正常复制*/@Testpublic void test2() throws Exception {
    //读,输入//RandomAccessFile read = new RandomAccessFile("Test921复制文件.txt", "rw");RandomAccessFile read = new RandomAccessFile("Test922示例图.png", "rw");//取,输出//RandomAccessFile write = new RandomAccessFile("Test926随机读取.txt", "rw");RandomAccessFile write = new RandomAccessFile("Test922示例图复制.png", "rw");int i ;while (( i = read.read())!= -1){
    write.write(i);}read.close();write.close();}

附加指定位置插入数据

 /*** 在原有的数据中插入xyz,我在里原有的数据为123456789* 我要在3后面插入xyz*/@Testpublic void test() throws Exception {
    RandomAccessFile randomAccessFile = new RandomAccessFile("Test927.txt", "rw");//指针指到索引为3的位置,实际在数组的4号位randomAccessFile.seek(3);byte[] bytes = new byte[2];//可变的字符串,StringBuilder不同步,StringBuffer同步//将索引后的所有数据以字符串的形式,储存,因为写入的时候会将后面的数据替换//需要先复制后面的数据,添加xyz后在加上原来的数据StringBuilder stringBuilder = new StringBuilder();int len;while ((len = randomAccessFile.read(bytes)) != -1) {
    //将数据添加到stringBuilder的末尾(456789)stringBuilder.append(new String(bytes, 0, len));}//打印复制的数据到控制台System.out.println(stringBuilder);//456789//调回指针,上面的指针已经到了末尾randomAccessFile.seek(3);//添加xyz从索引3的位置,且会替换掉之后的所有数据(456789)randomAccessFile.write("xyz".getBytes());//现在的指针在数据的末尾(123xyz),再将复制的字符串加入randomAccessFile.write(stringBuilder.substring(0).getBytes());//打印一下文件的内容到控制台randomAccessFile.seek(0);while ((len = randomAccessFile.read()) != -1) {
    System.out.print((char) len);//123xyz456789}randomAccessFile.close();}
  相关解决方案