Путь к файлу Java как путь к каталогу - PullRequest
0 голосов
/ 26 июня 2018

Учитывая такой путь к файлу:

Path filePath; // "/Users/me/Desktop/archive.zip"

Я хочу, чтобы функция преобразовала этот путь к файлу в путь к каталогу, удалив его расширение, трактуя путь к файлу как путь к каталогу. Например. такие как:

Path dirPath = asDirectoryPath(filePath); // "/Users/me/Desktop/archive"

Что я пробовал?

Ну, у меня есть решение, которое, на мой взгляд, довольно уродливо:

private Path asDirectoryPath(Path filePath)
{
    return Paths.get(path.toString().substring(0, path.toString().lastIndexOf('.')));
}

Почему уродливый? Потому что я вынужден выполнить путь к строковому преобразованию и искать «.» символ, предполагая, что следующие символы являются расширением файла. Эта функция должна быть переносимой и работать как в Windows, так и в Unix системах. Есть ли более правильные решения? Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Вы можете использовать getParent() метод Path в java.nio, он будет работать так, как нужно для Path в файл и возвращает Path в папку, содержащую файл.Если данный Path является папкой, то он возвращает родительскую папку или ноль, если родительской папки нет.

Path dirPath = filePath.getParent();

Ваш метод должен выглядеть следующим образом:

private Path asDirectoryPath(Path filePath) {
    return Paths.get(filePath.getParent());
}
0 голосов
/ 26 июня 2018

Регулярное выражение может использоваться здесь с методом split.

path.toString().split("\\.")[0])
...