java如何判断文件是否为图片

Python012

java如何判断文件是否为图片,第1张

java中提供了ImageInputStream类来对文件是否为图片进行判断,示例如下:

/** 

  * 判断文件是否为图片<br> 

  * <br> 

  * @param pInput 文件名<br> 

  * @param pImgeFlag 判断具体文件类型<br> 

  * @return 检查后的结果<br> 

  * @throws Exception 

  */ 

public static boolean isPicture(String  pInput, 

                           String pImgeFlag) throws Exception{ 

  // 文件名称为空的场合 

  if(Check.isNull(pInput)){ 

   // 返回不和合法 

   return false 

  } 

  // 获得文件后缀名 

  String tmpName = pInput.substring(pInput.lastIndexOf(".") + 1, 

                              pInput.length()) 

  // 声明图片后缀名数组 

  String imgeArray [][] = { 

    {"bmp", "0"}, {"dib", "1"}, {"gif", "2"}, 

    {"jfif", "3"}, {"jpe", "4"}, {"jpeg", "5"}, 

    {"jpg", "6"}, {"png", "7"} ,{"tif", "8"}, 

    {"tiff", "9"}, {"ico", "10"} 

  } 

  // 遍历名称数组 

  for(int i = 0 i<imgeArray.lengthi++){ 

   // 判断单个类型文件的场合 

   if(! Check.isNull(pImgeFlag) 

      && imgeArray [i][0].equals(tmpName.toLowerCase()) 

   && imgeArray [i][1].equals(pImgeFlag)){ 

    return true 

   } 

   // 判断符合全部类型的场合 

   if(Check.isNull(pImgeFlag) 

      && imgeArray [i][0].equals(tmpName.toLowerCase())){ 

    return true 

   } 

  } 

  return false 

}

这样,当把一个非图片文件的扩展名改为jpg、gif或者bmp时,就能绕过限制。所以必须得通过读取文件内容来进行判断。这里提供两种实现代码。1、ImageInputStream iis = ImageIO.createImageInputStream(resFile)//resFile为需被Iterator&ltImageReader&gtiter = ImageIO.getImageReaders(iis)if (!iter.hasNext()) {//文件不是图片 System.out.println(&quot此文件不为图片文件&quot)}2、BufferedImage bi = ImageIO.read(resFile)if(bi == null){ System.out.println(&quot此文件不为图片文件&quot)}

简单方案:可以通过文件夹内文件的后缀名字判断。

复杂的要通锅都区每个文件内容,判断文件是否为图片。不同格式的图片文件,二进制文件内容结构是不同的,但是这样就比较麻烦,而且文件读写,效率不高。

import java.io.File

import java.io.IOException

import java.util.HashSet

import java.util.Set

public class HasImage {

public static void main(String[] args) {

try {

boolean has = hasImage("E:\\BaiduZhidao")

System.out.println("文件夹下是否有图片:"+has)

} catch (IOException e) {

e.printStackTrace()

}

}

static boolean hasImage(String path) throws IOException {

// 图片文件后缀

Set<String> sets = new HashSet<>()

sets.add(".jpg")

sets.add(".png")

sets.add(".gif")

sets.add(".bmp")

File file = new File(path)

// System.out.println(file.isDirectory())

if (file.isFile()) {

String fileName = file.getName()

if (fileName.lastIndexOf(".") > 0) {

String sufix = fileName.substring(fileName.lastIndexOf("."))

if (sets.contains(sufix.toLowerCase())) {

return true

}

}

}

if (file.isDirectory()) {

// System.out.println(file.getCanonicalPath())

File[] files = file.listFiles()

for (File file2 : files) {

boolean has = hasImage(file2.getAbsolutePath())

if (has) {

return true

}

}

}

return false

}

}