Получить имя файла из местоположения файла в Java - PullRequest
32 голосов
/ 18 июня 2009

У меня есть String, который предоставляет абсолютный путь к файлу (включая имя файла). Я хочу получить только имя файла. Какой самый простой способ сделать это?

Он должен быть как можно более общим, так как я не могу заранее знать, каким будет URL. Я не могу просто создать объект URL и использовать getFile() - хотя это было бы идеально, если бы это было возможно - поскольку это не обязательно префикс http://, это может быть c: / или что-то подобное.

Ответы [ 5 ]

80 голосов
/ 18 июня 2009
new File(fileName).getName();

или

int idx = fileName.replaceAll("\\\\", "/").lastIndexOf("/");
return idx >= 0 ? fileName.substring(idx + 1) : fileName;

Обратите внимание, что первое решение зависит от системы. Принимается во внимание только символ разделителя пути системы. Так что, если ваш код работает в системе Unix и получает путь Windows, он не будет работать. Это тот случай, когда обработка загрузки файлов отправляется Internet Explorer.

23 голосов
/ 18 июня 2009
new File(absolutePath).getName();
18 голосов
/ 18 июня 2009

Apache Commons IO предоставляет класс FilenameUtils, который предоставляет вам довольно богатый набор служебных функций для простого получения различных компонентов имен файлов, хотя класс java.io.File обеспечивает основы.

14 голосов
/ 13 ноября 2012

С Apache Commons IO FileNameUtils

String fileName = FilenameUtils.getName(stringNameWithPath);
1 голос
/ 03 августа 2017

Вот 2 способа (оба не зависят от ОС.)

Использование Paths: с 1,7

Path p = Paths.get(<Absolute Path of Linux/Windows system>);
String fileName = p.getFileName().toString();
String directory = p.getParent().toString();

Использование FilenameUtils в Apache Commons IO:

String name1 = FilenameUtils.getName("/ab/cd/xyz.txt");
String name2 = FilenameUtils.getName("c:\\ab\\cd\\xyz.txt");
...