2016-01-21 18 views
2

我必須運行一個Java程序,該程序需要跟蹤用戶所做的事務。我需要在.txt文件中記錄這些事務。 一切都很好用我的代碼,期望我看不到.txt文件 - 它不會被創建 - 直到程序關閉。Java:在程序運行時更新.txt文件並能夠看到更改

我們項目的目標是能夠在程序運行時看到該文件實時更新。用戶完成訂單#1,並且該訂單的交易記錄到.txt文件中,並且可以立即看到所做的更改 - 程序仍在運行。用戶完成訂單#2,並將該訂單的交易附加到.txt文件 - 同樣,程序正在運行。

我使用:

PrintWriter out; 
out = (new PrintWriter(new FileWriter("log.txt", true))); 

(writes lines to file) 

out.flush(); 
out.close(); 

此代碼是一個被調用每一個用戶完成他或她的訂單時間方法中。一旦訂單完成,log.txt文件應立即反映所做的更改,而不必退出程序。我花了幾個小時尋找如何做到這一點,但我沒有成功。我對Java和編程也相對陌生;因此,非常感謝任何指導。

謝謝。

+0

這可能是文本編輯器的錯,而不是程序。如果您重新打開文件,內容是否更新? –

+0

感謝您的評論。沒有更新。當log.txt文件尚不存在時 - 它將被創建 - 在程序退出之前,它不存在於目錄中。我也使用IntelliJ來運行該程序。 log.txt只在程序結束時顯示。 –

+0

http://stackoverflow.com/questions/4964169/is-there-a-way-to-force-a-file-to-be-written-in-java-so-that-after-the-function –

回答

0

可能只有當您調用flush方法時,纔會將您的緩衝區卸載並寫入文件。在寫操作之前,緩衝區等待積累一些數據。

1

你看過java的標準日誌記錄框架嗎? (slf4j)這是一個非常普遍的api,有很多非常好的實現,如logback或log4j等。讓那些擔心寫入文件。編程到一個接口(即slf4j接口),並複製粘貼(如果你不想做任何事情)一些xml配置爲從互聯網上的記錄器實現。

你不必打開文件,或刷新並關閉它們。您的代碼將是:

log.info("something happened"); 

閱讀此主題,因爲那裏實際上沒有嚴重的java項目,沒有記錄元素給他們。花一些時間學習這個框架,因爲你可以永遠使用它。