`

RandomAccessFile类的应用

阅读更多

      文件存取通常是顺序的,每在文件中存取一次,文件的读取位置就会相对于目前的位置前进一次。然而有时必须指定文件的某个区段进行读取或写入的动作,也就是进行随机存取(Random Access),即要能在文件中随意地移动读取位置。这时可以使用RandomAccessFile,使用它的seek()方法来指定文件存取的位置,指定的单位是字节。

 

      为了移动存取位置时的方便,通常在随机存取文件中会固定每一个数据的长度。例如长度固定为每一个学生个人数据,Java中并没有直接的方法可以写入一个固定长度数据(像C/C++中的structure),所以在固定每一个长度方面必须自行设计。先设计一个学生数据的类。

 

      对于每一个学生数据的实例在写入文件时,会固定以34字节的长度写入,也就是15个字符(30字节)加上一个int整数的长度(4字节)。

     使用StringBuilder来固定字符长度,可以使用size()方法来取得长度信息。

 

package io;

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

/**
 *
 * @author HaoWang
 */
public class TestRandomAccessFile {
    public static void main(String[] args) {
        Student[] students = {
            new Student("Justin", 90),
            new Student("momor", 95),
            new Student("Bush", 88),
            new Student("caterpillar", 84)};
        try {
            File file = new File("C:\\a.txt");// 建立RandomAccessFile实例并以读写模式打开文件
            RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
            for(int i = 0; i < students.length; i++) {
                // 使用对应的write方法写入数据
                randomAccessFile.writeChars(students[i].getName());
                randomAccessFile.writeInt(students[i].getScore());
            }
            Scanner scanner = new Scanner(System.in);
            System.out.print("读取第几个数据?");
            int num = scanner.nextInt();
            // 使用seek()方法操作存取位置
            randomAccessFile.seek((num-1) * Student.size());
            Student student = new Student();
            // 使用对应的read方法读出数据
            student.setName(readName(randomAccessFile));
            student.setScore(randomAccessFile.readInt());

            System.out.println("姓名:" + student.getName());
            System.out.println("分数:" + student.getScore());

            // 设置关闭文件
            randomAccessFile.close();
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("请指定文件名称");
        } catch(IOException e) {
            System.out.println(e.toString());
        }
    }

    private static String readName(RandomAccessFile randomAccessfile)
            throws IOException {
        char[] name = new char[15];
        for (int i = 0; i < name.length; i++) {
            name[i] = randomAccessfile.readChar();
        }
        // 将空字符取代为空格符并返回
        return new String(name).replace('\0', ' ');
    }
}

class Student {

    private String name;
    private int score;

    public Student() {
        this("No name",0);
    }

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public void setName(String name) {
        StringBuilder builder = null;
        if (name != null) {
            builder = new StringBuilder(name);
        } else {
            builder = new StringBuilder(15);
        }
        builder.setLength(15); // 最长 15 字符
        this.name = builder.toString();
    }

    public void setScore(int score) {
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    } 
    // 每个数据固定写入34字节
    public static int size() {
        return 34;
    } 
}

 

分享到:
评论

相关推荐

    RandomAccessFile类

    NULL 博文链接:https://chaoyi.iteye.com/blog/2083498

    基于RandomAccessFile文件分类的小程序

    `RandomAccessFile`是Java中的一个核心类,主要用于读写随机访问文件。与传统的`FileInputStream`和`FileOutputStream`不同,`RandomAccessFile`允许程序在文件的任意位置进行读写操作,而不是按照文件的线性顺序。...

    JAVA随机存储流(RandomAccessFile)的应用

    Java中的`RandomAccessFile`是一个非常重要的类,它允许我们以随机访问模式读写文件,这意味着我们可以自由地在文件的任何位置进行读写操作,而不仅仅是顺序地从头到尾处理文件。这个类提供了对文件内容进行高效定位...

    Java的IO流讲解代码: File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型

    File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型字节流、打印流、对象序列化流、字节数组流)、字符流(缓冲字符流、文件字符流、转换流、格式化输出流、字符数组流) 这份代码源码...

    RandomAccessFile的用法

    Java的`RandomAccessFile`类是Java I/O流体系中的一种特殊类型,它允许程序员以随机访问模式读取和写入文件。与传统的输入/输出流不同,`RandomAccessFile`可以任意位置开始读写,这使得它在处理大文件或需要定位到...

    RandomAccessFile向文件中写入中文

    本篇文章将详细介绍如何利用`RandomAccessFile`类正确地向文件中写入中文字符,并解释不同写入方法的工作原理及可能遇到的问题。 #### 一、RandomAccessFile 类概述 `RandomAccessFile`类提供了对文件进行随机访问...

    java的RandomAccessFile对文件进行读写操作

    在实际应用中,`RandomAccessFile`常用于日志记录、数据库索引文件的管理、二进制文件的处理等。例如,如果你需要在一个大文件中存储和查找特定的数据项,`RandomAccessFile`能让你高效地跳过不必要的部分,直接定位...

    体会RandomAccessFile

    `RandomAccessFile`是Java中的一个类,位于`java.io`包中,它提供了对文件进行读写的能力,并且可以随机地定位到文件中的任何位置进行数据的读取或写入,这使得在处理大型文件时更为灵活高效。与`FileInputStream`和...

    【IT十八掌徐培成】Java基础第16天-01.RandomAccessFile.zip

    本教程聚焦于Java中的`RandomAccessFile`类,这是Java I/O流体系中的一个重要部分,用于处理可以随机读写的数据文件。在Java基础学习的第16天,我们将深入探讨这个主题。 `RandomAccessFile`类在`java.io`包下,它...

    Java核心编程之文件随机读写类RandomAccessFile详解

    Java中的RandomAccessFile类是用于文件随机读写的工具类,它属于java.io包。RandomAccessFile提供了读取和写入文件的能力,并且允许程序访问文件的任意位置,这使得它能够方便地进行文件的随机访问。...

    itat复赛第3届的第3道题的答案

    *3编写一个Java应用程序,利用RandomAccessFile类,把几个int型整数(1,2,3,4,5,6,7,8,9,10) * 写入到一个名字为tom.dat文件中,然后按相反顺序读出这些数据并显示在屏幕上。(注意,一个int型数据占4个...

    dnzyz.rar_RandomAccessFile_java 文件管理_文件操作

    在Java编程语言中,`RandomAccessFile`是一个强大的类,用于对文件进行随机访问和读写操作。这个类提供了一种高效的方式,让我们能够在文件的任何位置读取或写入数据,而不仅仅是从文件的开头顺序读取。下面将详细...

    Java RandomAccessFile的用法详解

    Java中的`RandomAccessFile`是一个强大的类,用于对文件进行随机访问读写。与传统的`InputStream`和`OutputStream`不同,`RandomAccessFile`允许你在文件的任意位置直接读写数据,而不仅仅是从文件的开头顺序读取。...

    Java RandomAccessFile 指定位置实现文件读取与写入

    使用`RandomAccessFile`的一个常见应用场景是在数据库文件或者日志文件中,当需要快速定位并修改特定记录时,这种随机访问的能力就显得尤为重要。然而,由于`RandomAccessFile`不是`InputStream`或`OutputStream`的...

    ANDROID文件操作

    Android系统提供了丰富的API来进行文件操作,包括使用RandomAccessFile类进行随机访问和使用字节流进行文件读写。 1. RandomAccessFile随机访问类: RandomAccessFile类是Java的I/O库中的一个工具,它允许程序读取...

    Android文件下载(实现断点续传)

    本篇文章将详细探讨如何在Android中实现这一功能,主要使用Java的RandomAccessFile类以及多线程技术。 首先,理解断点续传的基本原理。它主要依赖于服务器端支持和客户端保存已下载部分的信息。当下载开始时,...

    RandomAccessFile_WineryApp:Java应用程序,使用JavaFX通过随机存取存储器读取和写入文件。 包括保存功能,带有视图栏和过滤器选项

    《JavaFX实现的RandomAccessFile应用:WineryApp深度解析》 在信息技术领域,JavaFX是一种强大的图形用户界面(GUI)工具包,用于构建跨平台的应用程序。它提供了丰富的功能和直观的API,使得开发者可以轻松创建...

    单元学习javaio.pdf

    整体来看,这部分文档内容主要集中在Java IO操作上,重点讲解了File类和RandomAccessFile类在文件处理中的应用,并且通过实际的代码示例加深了对这些类的使用方法的理解。同时,文档通过Student类的简单实现,向读者...

Global site tag (gtag.js) - Google Analytics