Если вы хотите, чтобы это работало надежно в средах сервлетов, вам нужно понять кое-что о среде, в которой будут работать ваши вещи.
Во-первых, ваш сервлет может быть развернут в нескольких различныхконтейнеры сервлетов, работающие на одной машине одновременно.Подумайте об испытательной машине, предназначенной для проверки того, работает ли она на Tomcat, Glassfish, Websphere и ..., Tomcat 7, Tomcat 8 и Tomcat 9. Каждый из них должен бытьполучить свой собственный файл users.txt, и каждый из них должен быть изолирован от users.txt любого из остальных.Нет элегантного способа выйти из этого, кроме как указать путь к файлу в $ {user.home}, а затем надеяться, что, скажем, три экземпляра tomcat не будут работать под одним и тем же идентификатором пользователя.
Тогдав данном контейнере сервлета ваш сервлет может быть развернут на нескольких отдельных виртуальных хостах.Поэтому вам нужно получить имя виртуального хоста из вашей среды и включить его в полный путь к файлу (в java EE есть вызов, чтобы сделать это, но я не знаю наизусть, какое это).
Затем в пределах данного виртуального хоста ваш сервлет мог быть включен в более чем одно отдельное приложение (/ context), и вам необходимо убедиться, что каждый экземпляр изолирован от экземпляров других приложений (/ contextx), которые он включаетв. Таким образом, вам нужно получить имя приложения (/ context) из вашей среды и включить его в полный путь к файлу.
И, наконец, выполнять эти вызовы в среде, не связанной с EE ("в обычной java").project "), очевидно, в лучшем случае приведет к сбоям, и та же самая проблема" куда пропал файл "в худшем случае.
РЕДАКТИРОВАТЬ для дополнительного уточнения:
, где я сказал" вам нужночтобы обеспечить ... изоляцию "Я имел в виду больше" вам нужно продумать это и определить, хотите ли вы изоляцию или совместное использование на этом уровне ".Если вы действительно хотите поделиться, то вы должны убедиться, что управление данными получает все обычные свойства ACID, как и любой другой механизм СУБД, который вы / могли бы использовать.