Технически правильная кроссплатформенная организация хранения пользовательских файлов в Java-приложениях

1,00
р.
Как Вы знаете, в Windows файлы пользователя для большинства приложений хранятся в AppData/Roaming. У меня почти не опыта работы с MacOS и Linux, но думаю, там есть аналогичные папки.
Это относится не только к разработке Java-приложений, но полагаю, что как только мы запускаем приложение, первым делом оно должно проверять AppData/Roaming на наличие там своей подпапки и если её нет - создавать её.
Вопрос такой: есть ли что-нибудь получше, чем приведённый ниже алгоритм?
Узнаём ОС Получаем в зависимости от ОС путь к папке пользовательскими настройками (AppData/Roaming в случае Windows) Проверяем, если ли подпапка конкретно того приложения которое мы разрабатываем. Если есть - проверяем, есть ли права доступа к ней. Если нет - создаём. Работаем с файлами подпапки.
Может быть, есть какая-нибудь подходящая библиотека от Spring?

Ответ
В моем случае приложение пишет в подпапку Tomcat aplication server поскольку оно одно. Алгоритм аналогичен вашему.
private static final String NIX_ROOT_FOLDER = "/opt/tomcat" private static final String WIN_ROOT_FOLDER = "C:\\Users\\%username%\\AppData\\Roaming\\tomcat" private static final String OS_NAME = System.getProperty("os.name").toLowerCase()
public static final String ROOT_FOLDER = OS_NAME.contains("win") ? WIN_ROOT_FOLDER : NIX_ROOT_FOLDER

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

Spring, на сколько я знаю дает только обертку для стандартных джавовских алгоритмов работы с файлами..