欢迎使用优快云-markdown编辑器

本文介绍了如何利用Java中的RandomAccessFile类进行文件的基本读写操作,包括通过数组批量写入和读取数据、基于缓存复制文件、写入基本数据类型及读取等关键功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 通过数组实现对一组数据的写入

package day01;

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

/**
* 批量写入一组字节
* @author Administrator
*
*/
public class RandomAccessFileDemo4 {

public static void main(String[] args) throws IOException {

    RandomAccessFile raf=new RandomAccessFile("test.txt","rw");
    /**
     *String 的getBytes()方法:
     *将当前字符串按照当前系统默认的字符集转换为对应得而字节
     */
    String str="我爱学习,学习爱我";
    byte[] buf=str.getBytes("GBK");
    raf.write(buf);
    raf.close();
}

}

2、 通过数组对数据的读取
int read(byte[] buf)
一次尝试从文件中读取buf数组length个字节
并从该数组的第I一个位置其起存放实际读取到的字节
返回值为实际读到的字节数

package day01;


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


/**
 * 读取一个字节数组的数据
 * @author Administrator
 *
 */
public class RandomAccessFileDemo5 {


    public static void main(String[] args) throws IOException {
         RandomAccessFile raf =new RandomAccessFile("test.txt","r");
    /**
     * int read(byte[] buf)
     * 一次尝试从文件中读取buf数组length个字节
     * 并从该数组的第I一个位置其起存放实际读取到的字节
     * 返回值为实际读到的字节数
     */
    //创建字符数组
    byte[] buf =new byte[1000];
    //读取文件,并返回实际读写到的字节数
    int len=raf.read(buf);
    /**
     * 从字节数组转换为对应的字符串
     */
    //输出返回的字节数
    System.out.println(len);

    //转换为字符串
    String str=new String(buf);
    //输出读到的字符串,并去空格
    System.out.println(str.trim());
    raf.close();

    }


}

3、基于缓存形式复制文件

package day01;

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

/**
 * 基于缓存形式复制文件
 * @author Administrator
 *
 */
public class RandomAccessFileDemo6 {

    public static void main(String[] args) throws IOException {
         RandomAccessFile src=new RandomAccessFile("src.iso","r");

         RandomAccessFile copy=new RandomAccessFile("copy.iso","rw");
         //计时开始
         long start=System.currentTimeMillis();
         //定义数组
         byte[] str=new byte[1024*10];
         /**
          * int read(byte[] buf)
          * 若返回值为-1,表示没有数据可读
          */
         int d=-1;
         while( (d=src.read(str))!=-1 ){
             //0:从0开始
             //d:写入d个元素   即:读取了几个元素,就写入几个元素
             copy.write(str,0,d);
         }
         src.close();
         copy.close();
         //计时结束
         long end=System.currentTimeMillis();
         System.out.println("拷贝完毕!");
         System.out.println("用时:"+(end-start)+"ms");

    }

}

4、向文件中写入基本数据类型数据
(>>> :无符号右移,忽略符号位,空位以0补)

package day01;

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

/**
 * 向文件中写入基本数据类型
 * @author Administrator
 *
 */
public class RandomAccessFileDemo7 {

    public static void main(String[] args) throws IOException {
         RandomAccessFile raf=new RandomAccessFile(
                 "raf.dat","rw");

         int num=Integer.MAX_VALUE;
         //将int值写入文件
         /**
          *
          * 01111111 111111111 11111111 11111111
          *
          * >>> :无符号右移,忽略符号位,空位以0补
          */
         //原生写法
//         raf.write(num>>>24);
//         raf.write(num>>>16);
//         raf.write(num);

         /**
              * public final void writeInt(int v) throws IOException {
              *write((v >>> 24) & 0xFF);
              *write((v >>> 16) & 0xFF);
              *write((v >>>  8) & 0xFF);
              *write((v >>>  0) & 0xFF);
                //written += 4;
              *}
          */

         raf.writeInt(num);
         raf.writeDouble(1.4);

         raf.writeLong(12234);
         raf.close();


    }

}

5、对基本数据类型数据的读取

package day01;

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

/**
 * 读写基本数据类型
 * @author Administrator
 *
 */
public class RandomAccessFileDemo8 {

    public static void main(String[] args) throws IOException {

        RandomAccessFile raf=new RandomAccessFile(
                "raf.dat","rw");
         int i=raf.readInt();
         double b=raf.redDouble();
         System.out.println(i);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值