Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 开始从特定行读取文本文件_Java_Io_Text Files - Fatal编程技术网

Java 开始从特定行读取文本文件

Java 开始从特定行读取文本文件,java,io,text-files,Java,Io,Text Files,是一种写一个文本文件,读几行,关闭它,重新打开它,然后从你之前停下来的那一行开始阅读的方法吗?或者你总是要从顶部开始吗?我敢肯定,每次你打开一个文件,它都会从头开始。每次我都会从顶部开始。这是最简单的,可能不会慢很多。您可以使用RandomAccessFile,但您必须使用自己的行读取器将其包装(并检查文件是否以不兼容的方式更改)难道您不能将行号保存到外部并跳转到/查找所需位置吗?您当然可以!这不是最快的方法,但它会起作用。顺便说一句,那些回答你问题的人告诉你应该从文件的开头开始重新处理,他们完

是一种写一个文本文件,读几行,关闭它,重新打开它,然后从你之前停下来的那一行开始阅读的方法吗?或者你总是要从顶部开始吗?

我敢肯定,每次你打开一个文件,它都会从头开始。

每次我都会从顶部开始。这是最简单的,可能不会慢很多。您可以使用RandomAccessFile,但您必须使用自己的行读取器将其包装(并检查文件是否以不兼容的方式更改)

难道您不能将行号保存到外部并跳转到/查找所需位置吗?

您当然可以!这不是最快的方法,但它会起作用。顺便说一句,那些回答你问题的人告诉你应该从文件的开头开始重新处理,他们完全没有抓住你问题的重点。有很多理由想回到你离开的地方

下面是我编写的一些代码,它允许您存储一个计数器值,然后遍历该文件,直到重新达到计数器值。。。在这一点上,循环将影响并处理剩余行的循环中的内容

干杯

//define input text file
def file = new File('C:\\inputtextfile.txt')
//define file for the last referenced counter
def CountFile = new File ('C:\\prime\\lastcount.txt')

//if the counter was null set it to zero
if (CountFile.eachLine({it}) == null){
CountFile.write('0')
}

//read the counter into a value
StartLine = CountFile.eachLine( {it} ) as long
//set the first line of the file
lineCount=0

file.eachLine { line  ->
if (lineCount >= StartLine){


//write the counter to a text file
////////////////////////////////////////////////////////////////
CountFile.write(lineCount.toString())
    lineCount++
///////////////////////////////////////////////////////////////
}

那么,如果文件内容在您关闭和重新打开文件之间发生变化,该怎么办?同一行是否仍然与重新开始读取相关?我假设您只能附加到该文件。您的意思是您假设您的代码是唯一可能读取/写入该文件的代码,并且它只会附加到该文件?如果是这样的话,为什么不让文件保持打开状态呢?不,我的代码不是访问文件的唯一代码。但它是一个日志文件,所以无论是谁写入它,都可能只是附加到它。实际上,查找比将整个文件读取到所需位置要快得多。所以随机存取文件是一种方法。此外,它的包装也不难编写,甚至在internet上也不难找到。好的,我刚刚检查了API,注意到RandomAccessFile已经实现了
String readLine()
。您可以以每秒100 MB的速度读取刚读取的文件。因此,重新读取10 MB的文件需要大约100毫秒。如果您有一个10 GB的文本文件,它会产生真正的差异。阅读RandomAccessFile.readLine()的注释是值得的,因为它不进行任何字符编码。它假设所有数据都是ASCII。但是,从RandomAccessFile的文档中,有一件事我不明白:您可以使用这个类来处理常规文本文件吗?