Как подтвердить, что файл является файлом изображения с языком 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))$)
Вот полный пример реализации.