簡體   English   中英

PrintWriter可以寫入“打開”文本文件(Java)

[英]Can PrintWriter write to an “open” text file (Java)

我需要創建一個Java程序的一部分,該程序“秘密”記錄用戶正在對該程序執行的所有活動。 純粹是為了抓住試圖“欺騙”系統的人們。 問題是,多個人將在多台計算機上使用同一程序

所有信息都需要使用PrintWriter寫入單個文本文件,稍后該文件將由程序的管理部分使用。

 PrintWriter printer = new PrintWriter(new FileWriter(serverFolderLocation + "\\LogUserInfo.txt", true));

預計將有50台以上的計算機使用此程序,每隔幾秒鍾,每按一次計算機上的特定按鈕,就會將每行包含7行以上的文本寫入該文件中

我知道將文本寫入文本文件的速度非常快,而且這種情況不太可能發生,但是如果將append設置為true時,同時有2台或更多台計算機同時寫入文本文件,數據會丟失嗎? 還是會正常添加?

這有可能嗎? 2+台設備在不同時間將數據寫入文本文件?

請注意,來自所有50多台計算機的所有數據都到達目標文件非常重要。

如果可能會出現問題,除了建立專用數據庫之外,還可以使用什么其他方法來執行類似的操作?

在FileWriter中將append設置為true

append-布爾值(如果為true),則數據將被寫入文件的末尾而不是開始。

如果您有50台計算機同時執行所有操作,那么將會有沖突。 當您嘗試修改另一個進程正在使用的文件時,計算機會發出抱怨,不要再拋出50個競爭者。

您可以嘗試使用Sockets

無論哪台計算機都保存該文件,都將其指定為“服務器”,並將其他計算機設置為“客戶端”。 您的客戶端將消息發送到服務器,服務器將這些消息以同步方式附加到文件。

然后,您可以通過一定的網絡和服務器安全性阻止大約50個客戶端直接更改日志文件。

您只是在這里重新發明輪子,但是方式很錯誤 另一個答案是正確的:使用一個簡單的文件,讓多個分布式用戶寫入同一個文件,只會尖叫失敗。

但是我不同意使用套接字的想法。 這確實很低,需要您自己實現很多(復雜的)事情。 您將不得不考慮網絡問題,多線程,鎖定,緩沖等。

當然,如果這是為了教育,那么建立類似的東西是一個挑戰。 但是,如果您的目標是要找到一個行之有效的健壯解決方案,那么您應該考慮使用一些第三方的現成解決方案。

您可以在這里開始閱讀。 然后選擇一個框架,例如logback。 或者,您可以研究消息傳遞服務 ,例如ActiveMQ或RabbitMQ。

再次:在分布式環境中創建和收集日志是A) 難以 解決的問題,但B)已解決的問題。

暫無
暫無

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

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