[英]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多台計算機的所有數據都到達目標文件非常重要。
如果可能會出現問題,除了建立專用數據庫之外,還可以使用什么其他方法來執行類似的操作?
append-布爾值(如果為true),則數據將被寫入文件的末尾而不是開始。
如果您有50台計算機同時執行所有操作,那么將會有沖突。 當您嘗試修改另一個進程正在使用的文件時,計算機會發出抱怨,不要再拋出50個競爭者。
您可以嘗試使用Sockets 。
無論哪台計算機都保存該文件,都將其指定為“服務器”,並將其他計算機設置為“客戶端”。 您的客戶端將消息發送到服務器,服務器將這些消息以同步方式附加到文件。
然后,您可以通過一定的網絡和服務器安全性阻止大約50個客戶端直接更改日志文件。
您只是在這里重新發明輪子,但是方式很錯誤 。 另一個答案是正確的:使用一個簡單的文件,讓多個分布式用戶寫入同一個文件,只會尖叫失敗。
但是我不同意使用套接字的想法。 這確實很低,需要您自己實現很多(復雜的)事情。 您將不得不考慮網絡問題,多線程,鎖定,緩沖等。
當然,如果這是為了教育,那么建立類似的東西是一個挑戰。 但是,如果您的目標是要找到一個行之有效的健壯解決方案,那么您應該考慮使用一些第三方的現成解決方案。
您可以在這里開始閱讀。 然后選擇一個框架,例如logback。 或者,您可以研究消息傳遞服務 ,例如ActiveMQ或RabbitMQ。
再次:在分布式環境中創建和收集日志是A) 難以 解決的問題,但B)已解決的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.