如何用java语言确认文件是图片文件?

如何用java语言确认文件是图片文件?,java,image,confirm,Java,Image,Confirm,我想知道如何使用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

我想知道如何使用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();
            }
        }
    }
}
publicstaticvoidmain(字符串[]args){
//获取文件中的图像格式
File File=新文件(“C:/Users/dell、/Desktop/4.xlsx”);
//从指定的fileDD创建图像输入流
ImageInputStream iis=null;
试一试{
iis=ImageIO.createImageInputStream(文件);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
//获取识别图像格式的所有当前注册的读卡器
迭代器iter=ImageIO.getImageReaders(iis);
如果(!iter.hasNext()){
System.out.println(“不是图片文件”);
抛出新的RuntimeException(“未找到读取器!无法读取上载的文件”);
}
//获得第一个读者
ImageReader=iter.next();
试一试{
System.out.println(“格式:“+reader.getFormatName());
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
//密流
如果(iis!=null){
试一试{
iis.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}最后{
试一试{
iis.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
}

但它并不完美!如果文件不是图片文件,则会显示异常,因此我想找到更好的方法。

图像扩展名太多。验证文件是否为图像的最佳方法可能是使用正则表达式。像这样的

([^\s]+(\.(?i)(jpg|png|gif|bmp|MORE|IMAGE|EXTENSIONS))$)
是一个完整的实现示例。

使用
ImageIO#read

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

基本上,方法
ImageIO.read(File)
在成功读取图像文件时将返回
buffereImage
对象,否则返回null。我们所要做的就是让
ImageIO
读取文件并检查它是否返回空值,如果它出于任何原因引发异常,我们可以安全地假设该文件不是图片文件。

公开您的电子邮件id是邀请垃圾邮件的最佳方式。请不要发布与问题无关的内容,我们不会向任何电子邮件发送解决方案,请阅读帮助中心了解如何提问。有数百种不同的图片格式,您希望识别哪种格式?通常,捕获异常并知道它不是图片文件是一个有效的选项。调用外部程序检查它,例如ImageMagik。