[英]Reading specific data from a line in a text file to respective arrays, in Java
[英]Reading a specific line from a text file in Java
有没有方法从文本文件中读取特定的行? 在API或Apache Commons中。 就像是 :
String readLine(File file, int lineNumber)
我同意它的实现是微不足道的,但如果文件非常大,它的效率并不高。
String line = FileUtils.readLines(file).get(lineNumber);
会这样做,但它仍然存在效率问题。
或者,您可以使用:
LineIterator it = IOUtils.lineIterator(
new BufferedReader(new FileReader("file.txt")));
for (int lineNumber = 0; it.hasNext(); lineNumber++) {
String line = (String) it.next();
if (lineNumber == expectedLineNumber) {
return line;
}
}
由于缓冲区,这将稍微更有效。
看一下Scanner.skip(..)
并尝试跳过整行(使用正则表达式)。 我不知道它是否会更有效 - 基准它。
PS有效率我的意思是内存效率
不是我知道的。
请注意,对于行开始的位置,文件没有特定的索引,因此任何实用程序方法都可以完全有效:
BufferedReader r = new BufferedReader(new FileReader(file));
for (int i = 0; i < lineNumber - 1; i++)
{
r.readLine();
}
return r.readLine();
(当然,有适当的错误处理和资源关闭逻辑)。
如果你读的线都是相同的长度,然后计算可能是有用的。
但是在线条长度不同的情况下,我认为没有其他方法可以一次读取它们,直到线数正确为止。
不幸的是,除非你能保证文件中的每一行都是完全相同的长度,否则你将不得不通读整个文件,或者至少要读到你所追踪的那一行。
计算行数的唯一方法是在文件中查找新行字符,这意味着您将不得不读取每个字节。
可以优化您的代码以使其整洁可读,但在下面您将始终阅读整个文件。
如果你要一遍又一遍地读取同一个文件,你可以解析文件并创建一个存储某些行号偏移量的索引,例如行100,200等的字节数。
因为文件是字节而不是面向行 - 任何通用的解决方案复杂度最多都是O(n),n是文件大小(以字节为单位)。 您必须扫描整个文件并计算行分隔符,直到您知道要读取的文件的哪个部分。
番石榴有类似的东西:
List<String> Files.readLines(File file, Charset charset);
所以你可以做到
String line = Files.readLines(file, Charsets.UTF_8).get(lineNumber);
使用File Utils:
File fileFeatures = new File(
"Homework1AdditionalFiles/jEdit4.3/jEdit4.3ListOfFeatureIDs.txt");
String line = (String) FileUtils.readLines(fileFeatures).get(lineNumber);
如果要以相同的方式使用同一文件(在特定行查找文本),则可以索引文件。 行号 - >偏移量。
根据这个答案 ,Java 8使我们能够从文件中提取特定的行。 该答案中提供了示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.