我需要创建一个Java程序的一部分,该程序“秘密”记录用户正在对该程序执行的所有活动。纯粹是为了抓住试图“欺骗”系统的人们。事实是,多个人将在多台计算机上使用同一程序
所有信息都需要使用PrintWriter写入单个文本文件,稍后该文件将由程序的管理部分使用。
PrintWriter printer = new PrintWriter(new FileWriter(serverFolderLocation + "\\LogUserInfo.txt", true));
预计有50台以上的计算机将使用此程序,每隔几秒钟,每按一次计算机上的特定按钮,就会将每行包含7行以上的文本写入该文件中
我知道将文本写入文本文件的速度非常快,而且这种情况不太可能发生,但是如果2台或2台以上的计算机碰巧同时写入文本文件,而将append设置为true,则数据会丢失失踪?还是会正常添加?
这甚至可能吗? 2+台设备在不同时间将数据写入文本文件?
请注意,来自所有50多台计算机的所有数据都到达目标文件非常重要。
如果可能会出现问题,除了建立专用的数据库之外,还可以使用什么其他方法来做类似的事情?
答案 0 :(得分:1)
Setting append to true in the FileWriter:
append-布尔值,如果为true,则数据将写入文件的末尾而不是开头。
如果您有50台计算机同时执行所有操作,那么将会有冲突。当您尝试修改另一个进程正在使用的文件时,您的计算机会发出抱怨,不要再抛出50个竞争者。
您可以尝试使用Sockets。
任何一台计算机都保存该文件,将其指定为“服务器”,并将其他计算机设置为“客户端”。您的客户端将消息发送到服务器,服务器将这些消息以同步方式附加到文件。
然后,您可以通过一定的网络和服务器安全性阻止大约50个客户端直接更改日志文件。
答案 1 :(得分:1)
您只是在这里重新发明轮子,但是以非常错误的方式。另一个答案是正确的:使用一个简单的文件,让多个分布式用户写入同一个文件,只会尖叫失败。
但是我不同意使用套接字的想法。这确实很低,需要您自己实现很多(复杂的)事情。您将不得不考虑网络问题,多线程,锁定,缓冲...
当然,如果这是为了教育,那么建立类似的东西是一个挑战。但是,如果您的目标是要找到一种行之有效的 robust 解决方案,则应该考虑使用一些第三方的现成解决方案。
您可以开始阅读here。然后选择一个框架,例如logback。另外,您可以查看消息传递服务,例如ActiveMQ或RabbitMQ。
同样:在分布式环境中创建和收集日志是A)难以解决的问题,而B)是已解决的问题。