簡體   English   中英

在寫入文件時讀取文件

[英]reading a file while it's being written

我已經閱讀了一些關於stackoverflow的帖子,但是仍然很困惑。 當讀取當前正在用Java編寫的文件時,如何跟蹤實際寫了多少行,從而不會得到奇怪的讀取結果?

編輯:對不起,我應該提到寫它的文件是用C ++編寫的,而讀它的文件是用Java編寫的,因此不能真正輕松地共享變量

當讀取當前正在用Java編寫的文件時,如何跟蹤實際寫了多少行,從而不會得到奇怪的讀取結果?

問題是您永遠無法確定文件的當前最后一個字符是行尾。 如果它是行終止符,則可以。 如果BufferedReader.readLine()將其解釋為沒有行終止符的完整行,則會出現奇怪的結果。

您需要做的是實現自己的行緩沖。 當您獲得EOF時,您將等到文件增長更多,然后繼續讀取該行。

另外,如果您使用的是Java 7或更高版本,則文件觀察器API允許您在不輪詢文件大小的情況下監視文件寫入。


順便說一句,有一個Apache commons類專門用來做這種事情:

http://commons.apache.org/io/api-2.0/org/apache/commons/io/input/Tailer.html

如果我的理解,該文件被寫在C#中的一些過程和另一個Java程序要讀取它,而正在寫的。

此處 查看 tail命令的“ 文件監視”部分。 但我想警告您,當我最近在Windows上使用cygwin尾部來跟蹤正在滾動的日志文件時,有時在高負載下會失敗。 其他實現可能更健壯。

要計算行數,只需在進行書寫的一側保留一個計數器即可。

因此,每次您寫一行代碼時,都要增加一個計數器,並通過諸如public int getNumLinesWritten()類的方法使該計數器可讀。

對我來說顯而易見的答案...為什么不使用緩沖區? 使用字符串或任何您需要的字符串。 (如果需要,可以使用字符串列表/數組,也許每行一個?)像寫入文件一樣追加到字符串,然后從該字符串讀取而不是從文件中讀取。 那對你有用嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM