繁体   English   中英

Java中的RandomAccessFile读/写

[英]Read/Write from RandomAccessFile in Java

我正在尝试使用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 void retrieve(long from,long to){

 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循环中读取该文件时,您不需要调用

    file.seek(开始);

    一点都不 导致光标自动转到下一行

    file.readLine();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM