gpt4 book ai didi

java - RandomAccessFile - 返回空字符串

转载 作者:行者123 更新时间:2023-12-01 15:29:05 25 4
gpt4 key购买 nike

我有一个固定格式的文件。

我想根据行号访问该文件中的特定行。

例如读取第 100 行

每行长度为200字节。

因此使用 RandomAccessFile 直接将光标移动到第 100 行就像:

File f = new File(myFile);
RandomAccessFile r = new RandomAccessFile(f,"rw");
r.skipBytes(200 * 99); // linesize * (lineNum - 1)
System.out.println(r.readLine());

但是,我得到的输出为空。

我在这里缺少什么?

这个问题是继续回答我之前的问题Reaching a specific line in a file using RandomAccessFile

更新:

下面的程序完全按照我的预期工作:

行大小为 200 个字符。

File f = new File(myFile);
RandomAccessFile r = new RandomAccessFile(f,"rw");
r.seek(201 * (lineNumber-1)); // linesize * (lineNum - 1)
System.out.println(r.readLine());

给出行号(整个文件中的任何行号)正在打印该行。

@EJP:请解释一下!

最佳答案

首先,如果您只想从文件中读取而不是写入文件,那么我建议您将 RandomAccessFile 打开为“r”而不是“rw”。原因是,如果文件打开以允许写入访问,您实际上可以将文件中的指针移动到大于文件长度的位置,因为您可以将文件写入到您想要的大小。

例如,如果您有一个长度为 100 字节的文件,以只读模式打开它会强制您将指针保留在这 100 字节中的某个位置。但是,如果您以读写模式打开同一个文件,您可以告诉 RandomAccessFile 去查找(250),它会服从而不会出现任何问题,因为它认为您可能想要在文件中的此时写出数据。

因此,正如其他一些人所说,您可能已经移到了文件末尾,这在“rw”模式下非常有效。

其次,如果您要从文件的开头读取,我建议您使用seek() 而不是skipBytes()。通过使用seek(),您可以保证移动到您想要的确切位置,因为它始终相对于文件的开头。但是,skipBytes() 是相对于文件中当前指针位置的,因此,如果您不小心将指针移动到了 RandomAccessFile 构造函数和skipBytes() 方法调用之间的代码中的某个位置,您将无法到达正确的位置.

因此,如果您要从文件的开头开始工作,seek() 提供了更高级别的安全性,无论您执行其他什么操作,您都将到达文件中的正确位置。随机访问文件。

关于java - RandomAccessFile - 返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9783880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com