Может ли PrintWriter записывать в «открытый» текстовый файл (Java) - PullRequest
0 голосов
/ 04 сентября 2018

Мне необходимо создать часть java-программы, которая будет «тайно» регистрировать все действия, которые пользователь выполняет с программой. чисто чтобы поймать людей, пытающихся «обмануть» систему. Дело в том, что несколько человек будут использовать одну и ту же программу на нескольких компьютерах

Вся информация должна быть записана с помощью PrintWriter в один текстовый файл, который впоследствии будет использоваться административной частью программы.

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

Ожидается, что 50 + - компьютеры будут использовать эту программу, каждые несколько секунд ожидается, что массив из 7+ строк текста будет записываться в этот файл при каждом нажатии определенной кнопки на компьютере

Я знаю, что запись текста в текстовый файл происходит очень быстро, и это вряд ли произойдет, но если два или более компьютера произойдут одновременную запись в текстовый файл, хотя для append установлено значение true, данные будут отправлены отсутствует? или добавится нормально?

Это вообще возможно? 2+ устройства записывают данные в текстовый файл в разное время?

Обратите внимание, что важно, чтобы все данные со всех 50+ компьютеров пришли в конечный файл.

Если могут возникнуть проблемы, какие другие методы можно использовать для выполнения чего-либо подобного, кроме настройки выделенной базы данных?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Вы просто заново изобретаете колесо, но очень неправильно способом. Другой ответ правильный: использование простого файла и наличие нескольких распределенных пользователей, пишущих в один файл, просто кричит об ошибке.

Но я не согласен с идеей использовать вместо этого сокеты. Это действительно низкий уровень и требует от вас выполнения многих (сложных) вещей самостоятельно. Вам придется подумать о проблемах сети, многопоточности, блокировке, буферизации, ...

Конечно, если это для образования, то создание чего-то подобного является проблемой. Но если ваша цель здесь состоит в том, чтобы прийти к надежному решению, которое просто работает, вам лучше подумать об использовании какого-либо стороннего готового решения.

Вы можете начать читать здесь . А затем выберите рамки, такие как logback. В качестве альтернативы вы можете посмотреть службы сообщений , такие как ActiveMQ или RabbitMQ.

Опять же: создание и сбор журналов в распределенных средах - это A) трудно , чтобы получить право, но B) проблема решена .

0 голосов
/ 04 сентября 2018

Настройка добавляется к true в FileWriter :

append - логическое значение, если true, тогда данные будут записаны в конец файла, а не в начало.

Если у вас есть 50 машин, делающих это все одновременно, возникнут конфликты. Ваш компьютер жалуется, когда вы пытаетесь изменить файл, который используется другим процессом, не добавляйте еще 50 претендентов.

Вы можете попробовать использовать Сокеты .

Какой бы компьютер не содержал этот файл, определите его как «сервер» и сделайте другие машины «клиентами». Ваши клиенты отправляют сообщения на сервер, ваш сервер добавляет эти сообщения в файл синхронизированным способом.

Затем вы можете запретить вашим ~ 50 клиентам напрямую изменять файл журналов с некоторой защитой сети и сервера.

...