Проверьте, является ли файл файлом изображения - PullRequest
32 голосов
/ 10 марта 2012

Я использую какой-то файл IO и хочу узнать, есть ли способ проверить, является ли файл изображением?

Ответы [ 6 ]

47 голосов
/ 10 марта 2012

Это работает очень хорошо для меня.Надеюсь, что смогу помочь

import javax.activation.MimetypesFileTypeMap;
import java.io.File;
class Untitled {
    public static void main(String[] args) {
        String filepath = "/the/file/path/image.jpg";
        File f = new File(filepath);
        String mimetype= new MimetypesFileTypeMap().getContentType(f);
        String type = mimetype.split("/")[0];
        if(type.equals("image"))
            System.out.println("It's an image");
        else 
            System.out.println("It's NOT an image");
    }
}
21 голосов
/ 24 января 2014
if( ImageIO.read(*here your input stream*) == null)
    *IS NOT IMAGE*    

А также есть ответ: Как проверить загруженный файл, изображение это или другой файл?

12 голосов
/ 10 марта 2012

В Java 7 есть метод java.nio.file.Files.probeContentType () .В Windows используется расширение файла и реестр (он не проверяет содержимое файла).Затем вы можете проверить вторую часть типа MIME и проверить, находится ли он в форме <X>/image.

8 голосов
/ 18 февраля 2016

Вы можете попробовать что-то вроде этого:

String pathname="abc\xyz.png"
File file=new File(pathname);


String mimetype = Files.probeContentType(file.toPath());
//mimetype should be something like "image/png"

if (mimetype != null && mimetype.split("/")[0].equals("image")) {
    System.out.println("it is an image");
}
4 голосов
/ 10 марта 2012

Вы можете попробовать что-то вроде этого:

   import javax.activation.MimetypesFileTypeMap;

   File myFile;

   String mimeType = new MimetypesFileTypeMap().getContentType( myFile ));
   // mimeType should now be something like "image/png"

   if(mimeType.substring(0,5).equalsIgnoreCase("image")){
         // its an image
   }

это должно работать, хотя это не самая элегантная версия.

3 голосов
/ 10 марта 2012

Есть множество способов сделать это; см. другие ответы и ссылки на связанные вопросы. (Подход Java 7 кажется мне наиболее привлекательным, поскольку по умолчанию он использует соглашения, специфичные для платформы, и вы можете указать собственную схему определения типа файла.)

Однако я хотел бы отметить, что ни один механизм не является полностью непогрешимым:

  • Методы, использующие суффикс файла, будут обмануты, если суффикс нестандартный или неправильный.

  • Методы, основанные на атрибутах файла (например, в файловой системе), будут обмануты, если файл имеет неверный атрибут типа содержимого или его нет вообще.

  • Методы, основанные на проверке сигнатуры файла, могут быть обмануты двоичными файлами, которые, как оказалось, имеют одинаковые байты подписи.

  • Даже если вы просто пытаетесь прочитать файл как изображение, его можно обмануть, если вам не повезло ... в зависимости от формата (ов) изображений, которые вы пытаетесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...