Подтвердить что ты не робот

Проверьте, является ли файл файлом изображения

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

4b9b3361

Ответ 1

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

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 an image");
        else 
            System.out.println("It NOT an image");
    }
}

Ответ 3

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

Ответ 4

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

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");
}

Ответ 5

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

   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
   }

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

Ответ 6

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

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

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

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

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

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

Ответ 7

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);

    if(mimetype.startsWith("image/"))
        System.out.println("It an image");
    else 
        System.out.println("It NOT an image");
 }
}

Ответ 8

Вы также можете использовать этот способ, если хотите проверить изображения с помощью ограниченных расширений. Но вам нужно жестко расширять код, который вы хотите фильтровать.

public static boolean isImage(String filepath) {
    String[] extensions = {".jpg",".png"};
    for (String extension : extensions) {
        if(filepath.endsWith(extension)){
            System.out.println("Its an image");
            return true;
        }
    }
    return false;

Но я рекомендую этот путь,

public static boolean isImage(String filepath) throws IOException {
    File f = new File(filepath);
    return (ImageIO.read(f) != null);
}