如何用java语言确认文件是图片文件?
我想知道如何使用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
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。