首页 > Java > java教程 > 正文

随机访问文件

Barbara Streisand
发布: 2024-11-10 08:42:02
原创
443 人浏览过

Java 允许使用 RandomAccessFile 类直接访问文件中的任何位置,非常适合操作需要乱序读取或写入的数据。与InputStream和OutputStream类不同,RandomAccessFile实现了DataInput和DataOutput接口,它们提供了操作原始数据类型(如int、double等)的方法。

RandomAccessFile 结构和生成器
构造函数:

RandomAccessFile(String nomeArquivo, String acesso)

登录后复制
  • 文件名:文件名。
  • access:定义访问类型(“r”表示读取,“rw”表示读取和写入)。
  • Seek(long position) 方法:定义指针在文件中的位置。
void seek(long novaPos) throws IOException

登录后复制
  • novaPos:从文件开头开始的位置(以字节为单位)。查找后,从新位置开始读取/写入。

代码示例:随机访问双精度值
下面是一个示例,将六个双精度值写入文件,然后在特定位置读取它们。

import java.io.*;

class RandomAccessDemo {
  public static void main(String args[]) {
    double data[] = { 19.4, 10.1, 123.54, 33.0, 87.9, 74.25 };
    double d;

    // Abre e usa um arquivo de acesso aleatório
    try (RandomAccessFile raf = new RandomAccessFile("random.dat", "rw")) {

      // Grava os valores no arquivo
      for(int i = 0; i < data.length; i++) {
        raf.writeDouble(data[i]);
      }

      // Lê valores específicos com o método seek()
      raf.seek(0); // Busca o primeiro valor
      d = raf.readDouble();
      System.out.println("Primeiro valor: " + d);

      raf.seek(8); // Busca o segundo valor
      d = raf.readDouble();
      System.out.println("Segundo valor: " + d);

      raf.seek(8 * 3); // Busca o quarto valor
      d = raf.readDouble();
      System.out.println("Quarto valor: " + d);

      System.out.println("\nValores alternados:");
      for(int i = 0; i < data.length; i += 2) {
        raf.seek(8 * i); // Busca o i-ésimo valor
        d = raf.readDouble();
        System.out.print(d + " ");
      }

    } catch(IOException exc) {
      System.out.println("Erro de I/O: " + exc);
    }
  }
}

登录后复制

代码说明:
写入:将Double值写入random.dat文件。由于每个 double 占用 8 个字节,因此每个值都以 8 个字节的倍数开始(0、8、16、...)。

使用seek()阅读:

  • 第一个值:从字节 0 开始。
  • 第二个值:从字节 8 开始。
  • 第四个值:从字节 24 开始(第三个索引,因为 8 * 3 = 24)。
  • 交替值:每 16 个字节(每个值之间 8 个字节)读取一次值。

代码输出
输出示例:

Primeiro valor: 19.4
Segundo valor: 10.1
Quarto valor: 33.0

Valores alternados:
19.4 123.54 87.9

登录后复制

重要要点:
使用seek()定位:定义在文件中任何位置读/写的指针位置。
使用字节进行位置控制:由于每个 double 占用 8 个字节,因此我们可以使用 8 的倍数来计算每个值的位置。
此示例对于有效处理大量数据非常有用,仅访问必要的点而不遍历整个文件。

Arquivos de acesso aleatório

以上是随机访问文件的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板