Я использую JAI и создаю файл с:
PlanarImage img = JAI.create("fileload", myFilename);
Я проверяю перед той строкой, если файл существует. Но как я мог проверить, является ли файл .bmp или .tiff или файлом изображения?
Кто-либо знает?
В проекте Image Magick есть средства для идентификации изображений, и есть Java-оболочка для Image Magick под названием JMagick, которую, я думаю, вы можете рассмотреть вместо того, чтобы изобретать колесо:
Я использую Image Magick все время, включая его функцию «идентификации» из командной строки, и она ни разу не смогла идентифицировать изображение.
В те дни, когда мне была абсолютно необходима эта функция, а JMagick еще не существовал, я использовал команду Runtime.exec ()
ImageMagick identify
из Java, и она отлично работала.
В настоящее время, когда существует JMagick, в этом, вероятно, больше нет необходимости (но я еще не пробовал JMagick).
Обратите внимание, что он дает гораздо больше, чем просто формат, например:
$ identify tmp3.jpg
tmp3.jpg JPEG 1680x1050 1680x1050+0+0 DirectClass 8-bit 293.582kb
$ identify tmp.png
tmp.png PNG 1012x900 1012x900+0+0 DirectClass 8-bit 475.119kb
Другим вариантом является создание приложения Windows и установка этих двух свойств:
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
-121--4716426- Как насчет
stringVar = "Hello, {0}. How are you doing?";
arg1 = "John"; // or args[0]
String.Format(stringVar, arg1)
Можно даже иметь несколько аргументов, просто прирасти {x} и добавить другой параметр в метод Format (). Не уверен, что этот метод используется для разных, но и для «string», и для «String».
-121--3766019-Попробуйте использовать стандартный JavaBeans Activation Рамки (JAF)
При помощи стандартного расширения JavaBeans Activation Рамки разработчики, использующие технологию Java, могут воспользоваться преимуществами стандартных сервисов для определения типа произвольного фрагмента данных , инкапсуляции доступа к нему, обнаружения доступных на нем операций Например, если браузер получил изображение JPEG, эта структура позволила бы браузеру идентифицировать этот поток данных как изображение JPEG , и из этого типа браузер мог бы найти и создать экземпляр объекта, которым можно было бы манипулировать, или просмотреть это изображение.
Единственный (полу)надежный способ определить содержимое файла - открыть его и прочитать первые несколько символов. Затем вы можете использовать набор тестов, например, реализованный в команде Unix-файл, чтобы сделать обоснованное предположение о содержимом файла.
В начале файлов имеется последовательность идентификационных символов. Например, файлы JPEG начинаются с FF D8 FF.
Вы можете проверить эту последовательность в своей программе, но я не уверен, работает ли она для каждого файла.
Информацию об идентификационных символах Вы можете посмотреть на странице http://filext.com
Вы можете использовать DROID , инструмент для идентификации формата файлов, который также предлагает Java API, примерно так:
AnalysisController controller = new AnalysisController();
controller.readSigFile(signatureFileLocation);
controller.addFile(fileToIdentify.getAbsolutePath());
controller.runFileFormatAnalysis();
Iterator<IdentificationFile> it = controller.getFileCollection().getIterator();
Документация по использованию API довольно скудна, но вы можете взглянуть на этот рабочий пример (интересная часть находится в методе identifyOneBinary
).
Расширяя ответ Биркана, можно увидеть список «магических чисел», доступных здесь:
http: //www.astro .keele.ac.uk / oldusers / rno / Computing / File_magic.html
Я только что проверил файлы BMP и TIFF (оба только что созданы в Windows XP / Paint), и они оказались верными:
First two bytes "42 4d" -> BMP
First four bytes "4d 4d 00 2a" -> TIFF
Я использовал VIM для редактирования файлов, а затем Tools | Преобразуйте в шестнадцатеричный, но вы также можете использовать «od -c» или что-то подобное, чтобы проверить их.
В завершение, меня немного позабавило, когда я обнаружил магические числа, используемые для скомпилированных классов Java: 'ca fe ba be' - 'cafe babe' :)