【发布时间】:2016-10-26 21:45:12
【问题描述】:
我正在尝试使用 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);
}
}
调用retrieve(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() 函数有什么问题。任何反馈表示赞赏。谢谢你。
【问题讨论】:
-
这还能编译吗?你写的
start<long的检索方法里面的while-loop不正确?那应该是start<end我想这就是你的意思。 -
您正在读取一行,然后前进一个字节并再次读取同一行(减去第一个字节)。
-
抱歉,while 循环中的 long 是一种类型。进行了更正。谢谢。
-
你的
retrieve()方法没有意义。即使它编译了,它没有,它读取的任何内容都会被丢弃。它的签名应该是String retrieve(long idx),它的实现很简单。没有循环。而且您不能将自动递增的long也视为文件的偏移量。下定决心。不是记录号,是字节偏移量。 -
您希望您的
seek电话做什么?转到给定的行号?他们没有。它们转到给定的字节偏移量。
标签: java file random-access