• Java.io.RandomAccessFile


    RandomAccessFile Java提供的对文件内容的访问,既可以读文件,也可以写文件。支持随机访问文件,可以访问文件的任意位置。

    1)Java文件模型

      在硬盘上的文件是byte byte byte存储的,是数据的集合。

    2)打开文件

      有两种模式 rw 读写  r 只读。

      RandomAccessFile randomAccessFile=new RandomAccessFile(file, "rw");

      文件指针,打开文件时指针在开头 pointer=0。

    3)写方法

      randomAccessFile.write('赵');//只写了一个字节,同时指针指向下一个位置,准备再次写入

    4)读方法

      int b=randomAccessFile.read(...)读一个字节

    5)文件读写完成后一定要关闭(Oracle官方说明)

    package com.zhao.randomAccessFile;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.util.Arrays;
    
    public class RandomAccessFileDemo {
    
    public static void main(String[] args) throws IOException {
    File directory=new File("demo");
    if (!directory.exists()) {
    directory.mkdir();
    }
    File file=new File(directory, "raf.txt");
    if (!file.exists()) {
    file.createNewFile();
    }
    RandomAccessFile randomAccessFile=new RandomAccessFile(file, "rw");
    //指针的位置
    System.out.println(randomAccessFile.getFilePointer());
    
    randomAccessFile.write('赵');//只写了一个字节
    System.out.println(randomAccessFile.getFilePointer());
    randomAccessFile.write('B');
    System.out.println(randomAccessFile.getFilePointer());
    
    int i=0x7ffffff;
    //用write方法,每次只能写一个字节,如果把i写进去要写4次
    randomAccessFile.write(i>>>24);//高8位
    randomAccessFile.write(i>>>16);
    randomAccessFile.write(i>>>8);
    randomAccessFile.write(i);
    System.out.println(randomAccessFile.getFilePointer());
    
    //可以直接写一个i
    randomAccessFile.writeInt(i);
    System.out.println(randomAccessFile.getFilePointer());
    
    String s="中";
    byte[] bytes=s.getBytes("gbk");
    randomAccessFile.write(bytes);
    System.out.println(randomAccessFile.length());
    System.out.println(randomAccessFile.getFilePointer());
    
    //读文件,必须把指针移到头部
    randomAccessFile.seek(0);
    //一次性读取,把文件中的内容都读到字节数组中
    byte[] bs=new byte[(int)randomAccessFile.length()];
    randomAccessFile.read(bs);
    
    System.out.println(Arrays.toString(bs));
    String ss=new String(bs);
    System.out.println(ss);
    
    randomAccessFile.close();
    
    }
    }

     // Integer.toHexString(b&0xFF)把byte字节数组转换成十六进制。

  • 相关阅读:
    php自动跳转中英文页面
    如何让一个层关闭之后,就算刷新页面了也不显示。除非关闭页面再次打开
    彻底杜绝warning: Cannot add header information headers already sent in......
    大三了
    X牛人關於編程語錄
    C++虚函数表解析
    epoll:Edge or Level Triggered
    LRU和LFU的区别
    会话、进程组与僵死进程
    Effective C++学习笔记:确定基类有虚析构函数
  • 原文地址:https://www.cnblogs.com/zhao307/p/5349971.html
Copyright © 2020-2023  润新知