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
}
}