PrintWriter 可以写入 "open" 文本文件 (Java)
Can PrintWriter write to an "open" text file (Java)
我需要创建一个 java 程序的一部分,该程序记录用户使用该程序所做的所有 activity "secretly"。纯粹是为了抓人试图 "cheat" 系统。问题是,多人将在多台计算机上使用同一个程序
需要使用 PrintWriter 将所有信息写入单个文本文件,稍后将由程序的管理部分使用。
PrintWriter printer = new PrintWriter(new FileWriter(serverFolderLocation + "\LogUserInfo.txt", true));
预计将有 50 多台计算机使用此程序,每次在计算机上按下特定按钮时,预计每隔几秒就会将 7 行以上的文本数组写入该文件
我知道将文本写入文本文件非常快,这种情况不太可能发生,但是如果 2 台或更多计算机碰巧同时写入文本文件,而 append 设置为 true,将数据丢失?还是会正常追加?
这可能吗? 2 个以上的设备在不同时间将数据写入文本文件?
请注意,来自所有 50 多台计算机的所有数据都必须到达目标文件,这一点很重要。
如果可能出现问题,除了设置专用数据库,还有什么方法可以做这样的事情?
Setting append to true in the FileWriter:
append - boolean if true, then data will be written to the end of the file rather than the beginning.
如果您有 50 台机器同时执行此操作,就会发生冲突。当您尝试修改另一个进程正在使用的文件时,您的计算机会抱怨,不要再投入 50 个竞争者。
您可以尝试使用 Sockets。
无论哪台机器保存该文件,将其指定为 'server' 并使其他机器成为 'clients'。您的客户端向服务器发送消息,您的服务器以同步方式将这些消息附加到文件。
然后您可以通过某些网络和服务器安全措施阻止您的 ~50 个客户端直接更改日志文件。
您只是在这里重新发明轮子,但是以一种非常错误的方式。另一个答案是正确的:使用一个简单的文件,让多个分布式用户写入同一个文件只会因失败而尖叫。
但我不同意改用套接字的想法。那真的很低级,需要你自己实现很多(复杂的)东西。您将不得不考虑网络问题、多线程、锁定、缓冲……
当然,如果这是为了教育,那么构建这样的东西是一个挑战。但是,如果您的目标是找到一个可以正常工作的 稳健 解决方案,那么您应该考虑使用一些第 3 方现成的解决方案。
您可以开始阅读 here。然后选择一个框架,比如logback。或者,您可以查看 消息服务 ,例如 ActiveMQ 或 RabbitMQ。
再次说明:在分布式环境中创建和收集日志是 A) 很难 正确但 B) 已解决 问题。
我需要创建一个 java 程序的一部分,该程序记录用户使用该程序所做的所有 activity "secretly"。纯粹是为了抓人试图 "cheat" 系统。问题是,多人将在多台计算机上使用同一个程序
需要使用 PrintWriter 将所有信息写入单个文本文件,稍后将由程序的管理部分使用。
PrintWriter printer = new PrintWriter(new FileWriter(serverFolderLocation + "\LogUserInfo.txt", true));
预计将有 50 多台计算机使用此程序,每次在计算机上按下特定按钮时,预计每隔几秒就会将 7 行以上的文本数组写入该文件
我知道将文本写入文本文件非常快,这种情况不太可能发生,但是如果 2 台或更多计算机碰巧同时写入文本文件,而 append 设置为 true,将数据丢失?还是会正常追加?
这可能吗? 2 个以上的设备在不同时间将数据写入文本文件?
请注意,来自所有 50 多台计算机的所有数据都必须到达目标文件,这一点很重要。
如果可能出现问题,除了设置专用数据库,还有什么方法可以做这样的事情?
Setting append to true in the FileWriter:
append - boolean if true, then data will be written to the end of the file rather than the beginning.
如果您有 50 台机器同时执行此操作,就会发生冲突。当您尝试修改另一个进程正在使用的文件时,您的计算机会抱怨,不要再投入 50 个竞争者。
您可以尝试使用 Sockets。
无论哪台机器保存该文件,将其指定为 'server' 并使其他机器成为 'clients'。您的客户端向服务器发送消息,您的服务器以同步方式将这些消息附加到文件。
然后您可以通过某些网络和服务器安全措施阻止您的 ~50 个客户端直接更改日志文件。
您只是在这里重新发明轮子,但是以一种非常错误的方式。另一个答案是正确的:使用一个简单的文件,让多个分布式用户写入同一个文件只会因失败而尖叫。
但我不同意改用套接字的想法。那真的很低级,需要你自己实现很多(复杂的)东西。您将不得不考虑网络问题、多线程、锁定、缓冲……
当然,如果这是为了教育,那么构建这样的东西是一个挑战。但是,如果您的目标是找到一个可以正常工作的 稳健 解决方案,那么您应该考虑使用一些第 3 方现成的解决方案。
您可以开始阅读 here。然后选择一个框架,比如logback。或者,您可以查看 消息服务 ,例如 ActiveMQ 或 RabbitMQ。
再次说明:在分布式环境中创建和收集日志是 A) 很难 正确但 B) 已解决 问题。