java 随机读写访问流及seek方法

Posted zsbenn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 随机读写访问流及seek方法相关的知识,希望对你有一定的参考价值。

package stream;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

import org.junit.jupiter.api.Test;



/*
 * RandomAccessTile:随机读写访问流
 *     既可以是输入流,也可以是输出流
 *     r|w|d|s:读|写|更新数据|元数据更新 
 *     
 *     w:是对开头对文件内容进行覆盖
 * 
 * */

public class RandomAccessFileTest {
    
    @Test
    public void test1(){
        
        RandomAccessFile raf1 = null;
        RandomAccessFile raf2 = null;
        try {
            //1.流对象
            raf1 = new RandomAccessFile(new File("hello.txt"),"r");
            raf2 = new RandomAccessFile(new File("hello2.txt"),"rw");
            
            //2.读写
            byte[]     buffer = new byte[1024];
            int len;
            while((len = raf1.read(buffer))!=-1) {
                raf2.write(buffer,0,len);
            }
        } catch (Exception e) {
            
            e.printStackTrace();
        }
        finally {
            try {
                if(raf1!=null)
                    raf1.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                if(raf2!=null)
                    raf2.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    /*
     * seek随机访问|插入方法
     * 
     * */
    @Test
    public void test2() throws IOException {
        RandomAccessFile raf1 = new RandomAccessFile("hello.txt", "rw");
        /*raf1.seek(3); 
        raf1.write("abc".getBytes());
    */
        /*
         * 使用StringBuilder
         * */
        StringBuilder sb = new StringBuilder((int)(new File("hello.txt").length()));
        raf1.seek(3L);
        int len;
        byte[] buffer = new byte[20];
        while((len = raf1.read(buffer))!=-1) {
            sb.append(new String(buffer,0,len));
        }
        
        raf1.seek(3L);
        raf1.write("xyz".getBytes());
        raf1.write(sb.toString().getBytes());
        raf1.close();
    }
    
}

 

 

以上是关于java 随机读写访问流及seek方法的主要内容,如果未能解决你的问题,请参考以下文章

Java IO RandomAccessFile 任意位置读/写

java15

C#常用IO流及读写文件

Java 实现文件随机读写-RandomAccessFile

Java之------IO基础到加强

随机访问