首页 > 技术文章 > IO流之随机存取文件流

yicurtain 2021-07-16 17:21 原文

IO流之随机存取文件流

RandomAccessFile的使用

  1. RandomAccessFile直接继承于java.lang.Object类,实现了DataInput和DataOutPut接口
  2. RandomAccessFile既可以作为一个输入流,又可以作为一个输出流。
  3. 如果RandomAccessFile作为输出流时,写出到的文件如果不存在,则在执行过程中自动创建;如果写出的文件存在,则会对原有文件内容进行覆盖。(默认情况下,从头覆盖)
  4. void seek(long pos):将文件记录指针定位到 pos 位置

举例

package com.yicurtain.IO;

import org.junit.Test;

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

public class RandomAccessFileTest {

    @Test
    public void test1(){
//        1.
        RandomAccessFile raf1 = null;
        RandomAccessFile raf2 = null;
        try {
            raf1 = new RandomAccessFile(new File("beauty.jpg"),"r");
            raf2 = new RandomAccessFile(new File("beauty2.jpg"),"rw");

//        2.
            byte[] cbuf = new byte[20];
            int len;
            while ((len=raf1.read(cbuf))!=-1){
                raf2.write(cbuf);

            }
        } 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();
            }
        }
        }



}

导入jar包复制使用方法

开发中,一般不自己写IO流的源码,导入jar包,使用方法。(尚硅谷 p619)

package com.yicurtain.IO;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;

public class jarTest {
    public static void main(String[] args) {
        try {
            File srcFile = new File("D:\\JAVA\\java file\\基础语法\\HelloWorld\\IOStream\\beauty.jpg");
            File desFile = new File("D:\\JAVA\\java file\\基础语法\\HelloWorld\\IOStream\\beauty3.jpg");

            FileUtils.copyFile(srcFile,desFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

推荐阅读