程序员社区

Java IO教程 --- Java RandomAccessFile 示例

Java RandomAccessFile 提供了将数据读取和写入文件的工具。RandomAccessFile 将文件作为存储在文件系统中的大字节数组和一个游标使用,我们可以使用它来移动文件指针位置。

Java 随机访问文件

file

RandomAccessFile 类是Java IO 的一部分。在java中创建RandomAccessFile的实例时,我们需要提供打开文件的模式。例如,要以只读模式打开文件,我们必须使用“r”,而对于读写操作,我们必须使用“rw”。

使用文件指针,我们可以从任意位置的随机访问文件中读取或写入数据。要获取当前文件指针,可以调用getFilePointer()方法,设置文件指针索引,可以调用seek(int i)方法。

如果我们在已经存在数据的任何索引处写入数据,它将覆盖它。

Java RandomAccessFile 读取示例

我们可以使用 java 中的 RandomAccessFile 从文件中读取字节数组。下面是使用 RandomAccessFile读取文件的伪代码。

RandomAccessFile raf = new RandomAccessFile("file.txt", "r");
raf.seek(1);
byte[] bytes = new byte[5];
raf.read(bytes);
raf.close();
System.out.println(new String(bytes));

在第一行,我们以只读模式为文件创建 RandomAccessFile 实例。

然后在第二行,我们将文件指针移动到索引 1。

我们创建了一个长度为 5 的字节数组,因此当我们调用 read(bytes) 方法时,将从文件中读取 5 个字节到字节数组中。

最后,我们关闭 RandomAccessFile 资源并将字节数组打印到控制台。

Java RandomAccessFile 编写示例

这是一个简单的示例,展示了如何在 java 中使用 RandomAccessFile 将数据写入文件。

RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
raf.seek(5);
raf.write("Data".getBytes());
raf.close();

由于 RandomAccessFile 将文件视为字节数组,因此写入操作可以覆盖数据以及附加到文件中。这一切都取决于文件指针位置。如果指针移动到文件长度之外,然后调用写操作,那么文件中就会有垃圾数据写入。所以你在使用写操作时应该注意这一点。

RandomAccessFile 追加示例

我们所需要的只是确保文件指针位于文件末尾以附加到文件中。下面是使用 RandomAccessFile 附加到文件的代码。

RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
raf.seek(raf.length());
raf.write("Data".getBytes());
raf.close();

Java RandomAccessFile 示例

这是一个完整的 java RandomAccessFile 示例,具有不同的读写操作。

package com.journaldev.files;

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

public class RandomAccessFileExample {

    public static void main(String[] args) {
        try {
            // file content is "ABCDEFGH"
            String filePath = "/Users/pankaj/Downloads/source.txt"; 

            System.out.println(new String(readCharsFromFile(filePath, 1, 5)));

            writeData(filePath, "Data", 5);
            //now file content is "ABCDEData"

            appendData(filePath, "pankaj");
            //now file content is "ABCDEDatapankaj"
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void appendData(String filePath, String data) throws IOException {
        RandomAccessFile raFile = new RandomAccessFile(filePath, "rw");
        raFile.seek(raFile.length());
        System.out.println("current pointer = "+raFile.getFilePointer());
        raFile.write(data.getBytes());
        raFile.close();

    }

    private static void writeData(String filePath, String data, int seek) throws IOException {
        RandomAccessFile file = new RandomAccessFile(filePath, "rw");
        file.seek(seek);
        file.write(data.getBytes());
        file.close();
    }

    private static byte[] readCharsFromFile(String filePath, int seek, int chars) throws IOException {
        RandomAccessFile file = new RandomAccessFile(filePath, "r");
        file.seek(seek);
        byte[] bytes = new byte[chars];
        file.read(bytes);
        file.close();
        return bytes;
    }

}

这就是java 中的RandomAccessFile的全部内容。

赞(0) 打赏
未经允许不得转载:IDEA激活码 » Java IO教程 --- Java RandomAccessFile 示例

一个分享Java & Python知识的社区