File.getName против Path.GetFileName

#java

#java

Вопрос:

File.getName и Path.getFileName оба возвращают имя файла без каталога. В чем разница между ними? Если они делают то же самое, что более идиоматично? Последнее было введено позже; означает ли это, что оно обладает улучшенной функциональностью или в настоящее время считается более идиоматичным?

Комментарии:

1. В дополнение к приведенному ниже ответу @aran важно отметить, что java.nio.file.Path в целом это более идиоматично, чем java.io.File со времен Java SE 7. Oracle считает последний «устаревшим» кодом, и они предоставляют комментарии о том, как переходить java.io.File от использования к java.nio.file.Path использованию ( docs.oracle.com/javase/tutorial/essential/io/legacy.html )

Ответ №1:

Возвращаемый тип является одним из различий здесь.

  • File.getName() String
  • Path.getFileName() Path

Я предполагаю, что вы говорите о String выходе, который возвращает каждый из них (например, при вызове System.out их); В отношении этого их логика точно такая же: возвращайте значение, которое находится после последнего найденного разделителя.

Единственное реальное различие, о котором я мог подумать, — это вывод каждого из них, если указанное местоположение файла пустое / не существует. В то время File.getName() как вернет пустое, но инициализированное String , Path.getFilename() вернется null .

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

введите описание изображения здесь

1. File.getName()

  • пустой String

2. Path.getFilename()

  • null