【发布时间】:2012-10-05 09:56:22
【问题描述】:
有没有办法在java中读取文件中的一行。我的意思是如果我只想读取第100行,那么我可以直接读取它吗?或者我必须阅读整个文件,直到第 100 行。
【问题讨论】:
-
@较少相关,但它提出了不同的问题。
有没有办法在java中读取文件中的一行。我的意思是如果我只想读取第100行,那么我可以直接读取它吗?或者我必须阅读整个文件,直到第 100 行。
【问题讨论】:
您可以使用 java.io.RandomAccessFile。
移动到第 100 行使用以下行:
RandomAccessFile file = new RandomAccessFile("D:\\test.txt", "rw");
int totalLines = (int)file.length();
file.seek(100);
long pointer = file.getFilePointer();
for(int pt = 100; ct < totalLines; ct++){
byte b = file.readByte(); //read byte from the file
System.out.print((char)b); //convert byte into char
}
file.close();
有关详细信息,请参阅以下链接,该链接将对您有所帮助: http://tutorials.jenkov.com/java-io/randomaccessfile.html
【讨论】:
不,无论抽象如何,实际上都没有一种有效的方法可以“直接”从文件系统中读取第 100 行。您当然可以使用偏移量,以防每行具有固定长度的行(假设 CR 或 LF 等),仅此而已。您不能在基于“行”抽象的文件中跳转。
【讨论】:
在大多数情况下,您需要从文件开头逐行读取。
也有例外:
如果您为文件创建并维护一个指示每行开始位置的索引,您可以在索引中查找一行,然后seek 文件到要读取它的位置。
如果您的文件由固定长度的行组成,您可以将行首的位置计算为line_no * line_length,然后将seek 计算到该位置。
【讨论】: