Определение типов файлов в Java
Программно определить тип файла может быть удивительно сложно, и было предложено и реализовано много подходов идентификации файлов на основе контента . Существует несколько реализаций, доступных в Java для обнаружения типов файлов, и большинство из них в значительной степени или исключительно основаны на расширениях файлов. В этом посте рассматриваются некоторые из наиболее распространенных реализаций обнаружения типов файлов в Java.
В этом посте демонстрируется несколько подходов к идентификации типов файлов в Java. Каждый подход кратко описан, проиллюстрирован листингом кода, а затем связан с выводом, который демонстрирует, как различные общие файлы печатаются на основе расширений. Некоторые из подходов являются настраиваемыми, но все показанные здесь примеры используют сопоставления «по умолчанию», как это предусмотрено «из коробки», если не указано иное.
О примерах
Снимки экрана, показанные в этом посте, представляют собой каждый из перечисленных фрагментов кода, запускаемых для определенных тематических файлов, созданных для тестирования различных реализаций обнаружения типов файлов в Java. Прежде чем рассказать об этих подходах и продемонстрировать тип, который обнаруживает каждый из них, я перечисляю тестируемые файлы, их имена и имена.
файл название | файл расширение | файл Тип | Тип совпадений Конвенция о продлении? |
---|---|---|---|
actualXml.xml | XML | XML | да |
blogPostPDF | нет | ||
blogPost.pdf | да | ||
blogPost.gif | GIF | GIF | да |
blogPost.jpg | JPG | JPEG | да |
blogPost.png | PNG | PNG | да |
blogPostPDF.txt | текст | нет | |
blogPostPDF.xml | XML | нет | |
blogPostPNG.gif | GIF | PNG | нет |
blogPostPNG.jpg | JPG | PNG | нет |
dustin.txt | текст | Текст | да |
dustin.xml | XML | Текст | нет |
Дастин | Текст | нет |
Files.probeContentType (Path) [JDK 7]
Java SE 7 представила высоко утилитарный класс Files, и Javadoc этого класса кратко описывает его использование: «Этот класс состоит исключительно из статических методов, которые работают с файлами, каталогами или другими типами файлов» и «в большинстве случаев с методами, определенными здесь делегирует соответствующему провайдеру файловой системы для выполнения файловых операций ».
Класс java.nio.file.Files предоставляет метод probeContentType (Path), который «проверяет тип содержимого файла» посредством использования «установленных реализаций FileTypeDetector» (Javadoc также отмечает, что «данный вызов виртуальной машины Java») ведет общесистемный список детекторов типов файлов »).