Как подтвердить, что файл является файлом изображения с языком Java?

Я хочу знать, как я могу использовать Java, чтобы подтвердить, что файл является файлом изображения.

Я пробовал следующий код:

public static void main(String[] args)  {
    // get image format in a file
    File file = new File("C:/Users/dell、/Desktop/4.xlsx");

    // create an image input stream from the specified fileDD
    ImageInputStream iis = null;
    try {
        iis = ImageIO.createImageInputStream(file);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    // get all currently registered readers that recognize the image format
    Iterator<ImageReader> iter = ImageIO.getImageReaders(iis);

    if (!iter.hasNext()) {
        System.out.println("Not a picture file");
        throw new RuntimeException("No readers found! Unable to read the uploaded file");
    }

    // get the first reader
    ImageReader reader = iter.next();

    try {
        System.out.println("Format: " + reader.getFormatName());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    // close stream
    if (iis != null){
        try {
            iis.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                iis.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

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

2 ответа

Использование ImageIO#read,

public static boolean isPictureFile(File file){
    try{
        return ImageIO.read(file) != null;
    }catch(Exception ex){
        return false;
    }
}

В основном метод ImageIO.read(File) вернет BufferedImage объект, когда это успешно прочитало файл изображения, нуль иначе. Все, что нам нужно сделать, это позволить ImageIO прочитайте файл и проверьте, возвращает ли он нулевое значение или нет, и, если он выдает исключение по какой-либо причине, мы можем смело предположить, что файл не является графическим файлом.

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

([^\s]+(\.(?i)(jpg|png|gif|bmp|MORE|IMAGE|EXTENSIONS))$)

Вот полный пример реализации.

Другие вопросы по тегам