假设我在一个文件中有10行。我有2个参数指定索引的开头和结尾。
StartIndex = 2 //指定前两行
EndIndex = 3 //指定最后3行
我需要阅读两者之间的界限。我知道维护索引和跳过是其中一种方式......但是有没有其他有效的方法(即使使用外部库)?
由于
答案 0 :(得分:0)
我猜你问是否有任何方法直接跳到文件的第三行而不读取前两行。一般情况下(除非你有索引,正如你所提到的)答案是否定的。你必须阅读前两行来了解它们有多长,所以逐行读取文件并忽略第一行的简单解决方案就像你能得到的一样好。
关于结束,如果您的结束索引是文件开头的索引,那么您可以提前停止。但你的意思是文件末尾的第3行吗?在这种情况下,您还必须一直读到文件的末尾以了解何时停止。
一个特殊情况是,如果您知道所有线都是相同的长度。然后,您可以直接找到文件中的正确位置,然后从那里开始阅读。
答案 1 :(得分:0)
使用commons IO可以轻松完成,但效率不高,因为它会将整个文件加载到内存中。
File file = new File("myfile.txt");
List lines = FileUtils.readLines(file).subList(2,3);
答案 2 :(得分:0)
正如其他人指出的那样,除非你知道关于文件内容的更多信息,否则你必须按顺序阅读才能找到行开始的位置。您可以使用LineNumberReader这是一个缓冲的字符输入流来跟踪行号。