Java: проверить валидность пути к файлу

Дано: на вход метода приходит файл и путь, куда этот файл локально сохранить. Путь вида /opt/docstorage/foo/bar (или, если на винде, то C:\docstorage\foo\bar). Если промежуточных каталогов не существует, то они рекурсивно создаются через File.mkdirs(). Права на запись в docstorage есть, всё нормально сохраняется, проблем никаких. Проблемы начинаются, если на вход приходит кривой путь (типа docstorage/foo/bar) - такого каталога нет, но Java считает себя самой умной и воспринимает эту строку как путь относительно своих кишков, превращая в абсолютный путь вида C:\Users\username\AppData\Roaming\NetBeans\8.2\config\GF_4.1.1\domain1\config\docstorage\foo\bar (на винде).

Такого быть не должно. Надо либо сохранять файл ровно туда, куда сказано, либо кидать ошибку, что путь кривой. Вопрос: как это проконтролировать в коде? Paths.get() никаких проблем в такой ссылке не видит и спокойно её пропускает.

Понятно, что можно просто в лоб проверять, начинается ли путь со слэша или с буква-двоеточие-слэш (в зависимости от текущей операционки), но, может, есть менее кустарные способы валидации?


Ответы (2 шт):

Автор решения: azlov
File file = new File(path);
if (file.isDirectory()) {
  // сохраняем файл
} else {
  // бросаем ошибку
}
→ Ссылка
Автор решения: A. Bagryanov

Можно использовать пакет nio:

String directory = "C:\Temp\somedir";
Path file = Paths.get(directory);
boolean isExist = Files.exists(file);
→ Ссылка