Что такое надежный способ получить расширение файла на Java?
Нет надежного способа, поскольку нет надежного способа выделения суффикса файла из имени файла, в котором есть точечные (периодовые) символы.
Или, говоря иначе, «реальное» расширение - это конструкция, которая помещает имя файла читателю. И я думаю, вы обнаружите, что разные люди размещают разные конструкции. (Действительное расширение для «foo.tar.gz» - это «gz» или «tar.gz», в зависимости от вашей точки зрения ... и то, что приложение предназначено для выполнения.)
Лучший из вас может сделать это, чтобы закодировать ваше приложение, чтобы использовать либо «материал после первой точки», либо «материал после последней точки» в качестве суффикса, в зависимости от того, что ему нужно. (А может быть, немного фильтрации отличить ожидаемых расширений из материала, что приложение не понимает.)
Тогда есть проблема, что расширение файла (однако вы извлечь его) не является надежным индикатором формата файла. Вы можете попытаться определить формат, используя что-то вроде Apache Tika. Однако даже это может быть проблематичным, если формат не распознан или (что еще хуже), если для данного файла существует несколько возможных форматов.
Возвращаясь к foo.tar.gz
примеру, насколько мне известно, единственная программа, которая опирается на расширение файла является gunzip
команда, которая будет распаковывать foo.tar.gz
в foo.tar
. tar
сама команда является агностиком расширение файла:
- Он будет читать любой файл в формате TAR, независимо от расширения.
- Если файл TAR сжимается (с использованием сжатия gzip), вам необходимо указать
-z
или --gzip
или эквивалентную опцию, независимо от расширения.
Большинство программ UNIX/Linux аналогичным образом не зависят от расширений файлов.
С технической точки зрения '.tar.gz' является'.gz' .tar'. –
Пожалуйста, определите «реальное расширение». – biziclop
Возможный дубликат [Получение типа Mime типа в Java] (http://stackoverflow.com/questions/51438/getting-a-files-mime-type-in-java) – Tunaki