I/O—RandomAccessFile中指针的应用及ByteArrayOutputStream

RandomAccessFile:
该类既可以当 FileInputStream使用

RandomAccessFile raf1 = new RandomAccessFile("1.png","r");

也可以当FileOutputStream使用

RandomAccessFile raf2 = new RandomAccessFile("2.png","rw");

指针的应用
如何在文本指定位置插入相关字符串?
代码:

 @Test
    public void randW() {
        RandomAccessFile raf = null;
        try {
            raf = new RandomAccessFile("a.txt","rw");
            //控制指针的位置,从3开始读或写
            raf.seek(3);
            StringBuilder sb = new StringBuilder((int)new File("a.txt").length());
            byte[] buffer = new byte[3];
            int len;
            while ((len=raf.read(buffer))!=-1){
                sb.append(new String(buffer,0,len));
            }
            //因为上述操作使指针跑到最后,所有要重新指定指针位置
            raf.seek(3);
            raf.write(("fj"+sb).getBytes());

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(raf!=null)
                raf.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

补充知识点:
如何用ByteArrayOutputStream代替上述StringBuilder
代码:

@Test
    public void randW2() {
        RandomAccessFile raf = null;
        try {
            raf = new RandomAccessFile("a.txt","r");
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            //控制指针的位置,从3开始读或写
            raf.seek(3);
            byte[] buffer = new byte[3];
            int len;
            while ((len=raf.read(buffer))!=-1){
                baos.write(buffer,0,len);
            }
           System.out.println(baos.toString());

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(raf!=null)
                raf.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

你可能感兴趣的:(学习,java)