File f =newFile("C:\\Hello\\AnotherFolder\\The File Name.PDF");System.out.println(f.getName());
используя методы String :
File f =newFile("C:\\Hello\\AnotherFolder\\The File Name.PDF");System.out.println(f.getAbsolutePath().substring(f.getAbsolutePath().lastIndexOf("\\")+1));
Path p =Paths.get("C:\\Hello\\AnotherFolder\\The File Name.PDF");String file = p.getFileName().toString();
Обратите внимание, что разделение строки \\зависит от платформы, поскольку разделитель файлов может отличаться. Path#getNameзаботится об этом вопросе для вас.
Кто-нибудь делал сравнение производительности по различным методам в этом вопросе?
раздавить
@crush Я не думаю, что это Paths.getобращается к файловой системе, поэтому не стоит ожидать, что производительность будет существенно отличаться от подстроки / indexOf.
assylias
7
Почему это не существует на Android? странно.
Android-разработчик
12
Да, Path справляется с зависимой от платформы проблемой косой черты / обратной косой черты, но только в том случае, если путь к файлу идет с того же компьютера (или платформы). Подумайте об этом: вы загружаете файл, Internet Explorerи у него есть путь, "C:\\Hello\\AnotherFolder\\The File Name.PDF"но ваш код работает на Unix / Linux-машине, а затем p.getFileName()вернет весь путь, а не только The File Name.PDF.
Это извлечет индекс последнего \в вашем Stringи извлечет все, что идет после него fileName.
Если у вас есть Stringдругой разделитель, настройте его, lastIndexOfчтобы использовать этот разделитель. (Есть даже перегрузка, которая принимает целое Stringкак разделитель.)
Я пропустил его в приведенном выше примере, но если вы не уверены, откуда он Stringили что он может содержать, вы захотите проверить, что он lastIndexOfвозвращает неотрицательное значение, потому что Javadoc заявляет, что он вернет
Вы не должны использовать какие-либо из них, поскольку это зависит от платформы. /на Unix и \`(AND THERE IS A BUG IN THE MARKDOWN PARSER HERE) on windows. You can't know. Use another solution like File` или Paths.
Автомат
3
Есть File.separatorтакже зависят от платформы? Или это сработает ... String strPath = path.substring(path.lastIndexOf(File.separator)+1, path.length());
Джонатан
File.separator и File.separatorChar оба являются "/" в версии JDK для UNIX / Linux / macOS и оба "\" в версии для Windows.
可 可 Джеки
2
File.separatorне всегда будет работать здесь, потому что в Windows имя файла может быть разделено либо либо, "/"либо "\\".
DodgyCodeException
10
Другие ответы не совсем работали для моего конкретного сценария, где я читаю пути, которые произошли от ОС, отличной от моей текущей. Чтобы уточнить, я сохраняю вложения электронной почты, сохраненные с платформы Windows на сервере Linux. Имя файла, возвращаемое из API JavaMail, выглядит как «C: \ temp \ hello.xls»
Вы можете использовать объект FileInfo, чтобы получить всю информацию о вашем файле.
FileInfo f =newFileInfo(@"C:\Hello\AnotherFolder\The File Name.PDF");MessageBox.Show(f.Name);MessageBox.Show(f.FullName);MessageBox.Show(f.Extension);MessageBox.Show(f.DirectoryName);
Ответы:
просто используйте File.getName ()
используя методы String :
источник
Альтернативное использование
Path
(Java 7+):Обратите внимание, что разделение строки
\\
зависит от платформы, поскольку разделитель файлов может отличаться.Path#getName
заботится об этом вопросе для вас.источник
Paths.get
обращается к файловой системе, поэтому не стоит ожидать, что производительность будет существенно отличаться от подстроки / indexOf.Internet Explorer
и у него есть путь,"C:\\Hello\\AnotherFolder\\The File Name.PDF"
но ваш код работает на Unix / Linux-машине, а затемp.getFileName()
вернет весь путь, а не толькоThe File Name.PDF
.toString()
так неловко.Использование
FilenameUtils
в Apache Commons IO :источник
Учитывая, что
String
вы спрашиваете о том,нам нужно извлечь все после последнего разделителя, т.е.
\
, Это то, что нас интересует.Ты можешь сделать
Это извлечет индекс последнего
\
в вашемString
и извлечет все, что идет после негоfileName
.Если у вас есть
String
другой разделитель, настройте его,lastIndexOf
чтобы использовать этот разделитель. (Есть даже перегрузка, которая принимает целоеString
как разделитель.)Я пропустил его в приведенном выше примере, но если вы не уверены, откуда он
String
или что он может содержать, вы захотите проверить, что онlastIndexOf
возвращает неотрицательное значение, потому что Javadoc заявляет, что он вернетисточник
С 1.7
источник
Вы можете использовать путь = C: \ Hello \ AnotherFolder \ TheFileName.PDF
источник
/
на Unix и\`(AND THERE IS A BUG IN THE MARKDOWN PARSER HERE) on windows. You can't know. Use another solution like
File` илиPaths
.File.separator
также зависят от платформы? Или это сработает ...String strPath = path.substring(path.lastIndexOf(File.separator)+1, path.length());
File.separator
не всегда будет работать здесь, потому что в Windows имя файла может быть разделено либо либо,"/"
либо"\\"
.Другие ответы не совсем работали для моего конкретного сценария, где я читаю пути, которые произошли от ОС, отличной от моей текущей. Чтобы уточнить, я сохраняю вложения электронной почты, сохраненные с платформы Windows на сервере Linux. Имя файла, возвращаемое из API JavaMail, выглядит как «C: \ temp \ hello.xls»
Решение, которое я выбрал:
источник
Рассмотрим случай, когда Java является мультиплатформенным:
источник
Метод без какой-либо зависимости и заботится о .. , . и дубликаты разделителей.
Прецедент:
Возможно, getFileName немного сбивает с толку, потому что он также возвращает имена каталогов. Возвращает имя файла или последний каталог в пути.
источник
извлечь имя файла с помощью регулярных выражений Java *.
источник
Метод getFileName () файла java.nio.file.Path, используемый для возврата имени файла или каталога, указанного этим объектом пути.
Путь getFileName ()
Для справки:
https://www.geeksforgeeks.org/path-getfilename-method-in-java-with-examples/
источник
Вы можете использовать объект FileInfo, чтобы получить всю информацию о вашем файле.
источник