java - 在 Java 中从 RandomAccessFile 读取/写入

标签 java file random-access

我正在尝试使用 RandomAccessFile。我正在做的是尝试将消息存储在文件中,并尝试将所有消息从一个指针获取到另一个指针

//file is the RandomAccessFile
//newLine is just new line

我如何存储:

//I want to store a message per line
public void store(long idx, String message){

   file.seek(idx);
   file.write(message);
   file.write(newLine)
}

这就是我填写文件的方式:

void createDummy(String location) throws IOException {

    Random r = new Random();

    for (int i = 0; i < 10; i++) {

        long l = i;
        StringBuffer b = new StringBuffer();
        for (int j = 0; j < 10; j++) {

            b.append((char)r.nextInt(26)+65);
        }

        String str = b.toString();
        store(l, str);
        System.out.println("Stored "+str);
    }

}

这是输出:

Stored BYOENDRWEBUVGIFR
Stored HNXRKZWPAZUYCUHN
Stored RPRRAXWRBFSRSHJD
Stored AGTJXZMCFXENBQOH
Stored QLWXLIBKRPELYHPR
Stored VBUOVQICIOOTOTYK
Stored HPDZRPUGIYAFBGJE
Stored ZGLAIXTBGVCLJAGC
Stored UZKUXCWGCIVJLMAF
Stored RIXZSEDXQPAVDWEK

阅读...我的阅读方式:

//I want to retrieve all messages from "from" to "to"

公共(public)无效检索(长从,长到){

 long start = from;
 file.seek(start);

 while(start < to){ 
    System.out.println(file.readLine());
    start++;
    file.seek(start);
  }
}

调用检索(3,9);给出以下输出//从 3 检索到 9;

Read NRPRAGTJQLWXLVBUOVQHPDZRPUZGLAIXTBUZKUXCWGCRIXZSEDXQPAVDWEKBT                    WNWFVVYDPEMCSFVQ                                RXCZSNOBEPPDKNBB                                            LCPFDVUXWETHVWJQ                                                        CPCCDTSOCLSEXIST                                                                    QZFCQWMQVEXTOGNG                                                                                SSKTXOYMOBETGVWN                                                                                            DWYIMILEXQMSNUBJ
Read RPRAGTJQLWXLVBUOVQHPDZRPUZGLAIXTBUZKUXCWGCRIXZSEDXQPAVDWEKBT                    WNWFVVYDPEMCSFVQ                                RXCZSNOBEPPDKNBB                                            LCPFDVUXWETHVWJQ                                                        CPCCDTSOCLSEXIST                                                                    QZFCQWMQVEXTOGNG                                                                                SSKTXOYMOBETGVWN                                                                                            DWYIMILEXQMSNUBJ
Read PRAGTJQLWXLVBUOVQHPDZRPUZGLAIXTBUZKUXCWGCRIXZSEDXQPAVDWEKBT                    WNWFVVYDPEMCSFVQ                                RXCZSNOBEPPDKNBB                                            LCPFDVUXWETHVWJQ                                                        CPCCDTSOCLSEXIST                                                                    QZFCQWMQVEXTOGNG                                                                                SSKTXOYMOBETGVWN                                                                                            DWYIMILEXQMSNUBJ
Read RAGTJQLWXLVBUOVQHPDZRPUZGLAIXTBUZKUXCWGCRIXZSEDXQPAVDWEKBT                    WNWFVVYDPEMCSFVQ                                RXCZSNOBEPPDKNBB                                            LCPFDVUXWETHVWJQ                                                        CPCCDTSOCLSEXIST                                                                    QZFCQWMQVEXTOGNG                                                                                SSKTXOYMOBETGVWN                                                                                            DWYIMILEXQMSNUBJ
Read AGTJQLWXLVBUOVQHPDZRPUZGLAIXTBUZKUXCWGCRIXZSEDXQPAVDWEKBT                    WNWFVVYDPEMCSFVQ                                RXCZSNOBEPPDKNBB                                            LCPFDVUXWETHVWJQ                                                        CPCCDTSOCLSEXIST                                                                    QZFCQWMQVEXTOGNG                                                                                SSKTXOYMOBETGVWN                                                                                            DWYIMILEXQMSNUBJ
Read GTJQLWXLVBUOVQHPDZRPUZGLAIXTBUZKUXCWGCRIXZSEDXQPAVDWEKBT                    WNWFVVYDPEMCSFVQ                                RXCZSNOBEPPDKNBB                                            LCPFDVUXWETHVWJQ                                                        CPCCDTSOCLSEXIST                                                                    QZFCQWMQVEXTOGNG                                                                                SSKTXOYMOBETGVWN                                                                                            DWYIMILEXQMSNUBJ

我希望检索以下内容,但事实并非如此:

阅读 AGTJXZMCFXENBQOH 阅读 QLWXLIBKRPELYHPR 阅读 VBUOVQICIOOTOTYK 阅读 HPDZRPUGIYAFBGJE 阅读 ZGLAIXTBGVCLJAGC 阅读 UZKUXCWGCIVJLMAF

请问我的retrieve()函数出了什么问题。如有任何反馈,我们将不胜感激。谢谢。

最佳答案

有两件事:

  1. 你的newLine到底是什么,它应该是“\n”。

  2. 当您在 while 循环中读取该文件时,不需要调用

    文件.seek(开始);

    完全没有。因为光标会自动转到

    之后的下一行

    file.readLine();

关于java - 在 Java 中从 RandomAccessFile 读取/写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40272611/

相关文章:

Android - 从 1,440,000 行文本文件中提取特定行数据的有效方法

c++ - SFINAE - 检测类型 T 是否是具有随机访问运算符且对于给定值类型的指针、数组或容器

java - 一类静态方法中的构造函数

java - 如何在 Java 中将对象设为 'derefence'

java - 在 Websphere 中的 HMAC_SHA1 上获取无类定义

c# - 在 C# 中使用记事本打开文件

c - rewind() 之后,您可以使 fprintf() 写入文件末尾吗(例如完全覆盖)

c++ - 在随机访问文件中存储类数据的最佳实践

java - 设置javafx阶段的初始位置

python - Django - 从亚马逊 S3 中删除文件