Java 在读取文件时';正在写什么

Java 在读取文件时';正在写什么,java,io,Java,Io,我读过一些关于stackoverflow的帖子,但是我还是很困惑。在读取当前正在用Java编写的文件时,如何跟踪实际已写入的行数,以便不会得到奇怪的读取结果 编辑:对不起,我应该提到的是,文件是用C++写的,而Java是用java读取的,所以变量不能很容易地共享< p>来计算行数,只需要在写的一边保持一个计数器。 因此,每次写一行时,递增一个计数器,并通过一个方法使计数器可读,比如,public int getNumlinesWrite()要计算行数,只需在写的一侧保留一个计数器 因此,每次写一

我读过一些关于stackoverflow的帖子,但是我还是很困惑。在读取当前正在用Java编写的文件时,如何跟踪实际已写入的行数,以便不会得到奇怪的读取结果


<>编辑:对不起,我应该提到的是,文件是用C++写的,而Java是用java读取的,所以变量不能很容易地共享

< p>来计算行数,只需要在写的一边保持一个计数器。
因此,每次写一行时,递增一个计数器,并通过一个方法使计数器可读,比如,
public int getNumlinesWrite()

要计算行数,只需在写的一侧保留一个计数器


因此,每次写一行时,递增一个计数器,并通过一个方法使该计数器可读,类似于,
public int getNumlinesWrite()

这是我显而易见的答案。。。为什么不使用缓冲区呢?使用字符串或任何你需要的东西。(如果需要,可以使用字符串列表/数组,每行一个?)像写入文件一样附加到字符串,然后从该字符串读取,而不是从文件读取。这对你有用吗?

对我来说这是显而易见的答案。。。为什么不使用缓冲区呢?使用字符串或任何你需要的东西。(如果需要,可以使用字符串列表/数组,每行一个?)像写入文件一样附加到字符串,然后从该字符串读取,而不是从文件读取。这对您有用吗?

如果我理解的话,该文件是在某个进程中用C#编写的,而另一个Java进程希望在编写时读取它


查看tail命令中的文件监视部分。但我想提醒你,当我最近在Windows上使用cygwin tail跟踪滚动的日志文件时,它有时会在重载下失败。其他实现可能更健壮。

如果我理解的话,文件是在某些进程中用C#编写的,而另一个Java进程希望在编写时读取它

查看tail命令中的文件监视部分。但我想提醒你,当我最近在Windows上使用cygwin tail跟踪滚动的日志文件时,它有时会在重载下失败。其他实现可能更健壮

在读取当前正在用Java编写的文件时,如何跟踪实际已写入的行数,以便不会得到奇怪的读取结果

问题是,您永远无法确定文件的当前最后一个字符是行尾。如果它是一个行终止符,您就可以了。如果
BufferedReader.readLine()
将其解释为没有行终止符的完整行。。。奇怪的结果将接踵而至

您需要做的是实现自己的行缓冲。当你得到一个EOF时,你要等到文件再增长一些,然后继续读取该行

或者,如果您使用的是Java 7或更高版本,则允许您在不轮询文件大小的情况下监视文件写入


顺便说一句,有一个Apache commons类专门用于做这类事情:

在读取当前正在用Java编写的文件时,如何跟踪实际已写入的行数,以便不会得到奇怪的读取结果

问题是,您永远无法确定文件的当前最后一个字符是行尾。如果它是一个行终止符,您就可以了。如果
BufferedReader.readLine()
将其解释为没有行终止符的完整行。。。奇怪的结果将接踵而至

您需要做的是实现自己的行缓冲。当你得到一个EOF时,你要等到文件再增长一些,然后继续读取该行

或者,如果您使用的是Java 7或更高版本,则允许您在不轮询文件大小的情况下监视文件写入


顺便说一句,有一个Apache commons类专门用于做这类事情: