Я использую какой-то файл IO
и хочу узнать, есть ли способ проверить, является ли файл изображением?
Проверьте, является ли файл файлом изображения
Ответ 1
Это очень хорошо для меня. Надеюсь, что смогу помочь.
import javax.activation.MimetypesFileTypeMap;
import java.io.File;
class Untitled {
public static void main(String[] args) {
String filepath = "/the/file/path/image.jpg";
File f = new File(filepath);
String mimetype= new MimetypesFileTypeMap().getContentType(f);
String type = mimetype.split("/")[0];
if(type.equals("image"))
System.out.println("It an image");
else
System.out.println("It NOT an image");
}
}
Ответ 2
if( ImageIO.read(*here your input stream*) == null)
*IS NOT IMAGE*
А также есть ответ: Как проверить загруженный файл, будь то изображение или другой файл?
Ответ 3
В Java 7 существует метод java.nio.file.Files.probeContentType(). В Windows это использует расширение файла и реестр (он не проверяет содержимое файла). Затем вы можете проверить вторую часть типа MIME и проверить, находится ли она в форме <X>/image
.
Ответ 4
Вы можете попробовать что-то вроде этого:
String pathname="abc\xyz.png"
File file=new File(pathname);
String mimetype = Files.probeContentType(file.toPath());
//mimetype should be something like "image/png"
if (mimetype != null && mimetype.split("/")[0].equals("image")) {
System.out.println("it is an image");
}
Ответ 5
Вы можете попробовать что-то вроде этого:
import javax.activation.MimetypesFileTypeMap;
File myFile;
String mimeType = new MimetypesFileTypeMap().getContentType( myFile ));
// mimeType should now be something like "image/png"
if(mimeType.substring(0,5).equalsIgnoreCase("image")){
// its an image
}
это должно сработать, хотя это, по-видимому, не самая элегантная версия.
Ответ 6
Есть множество способов сделать это; см. другие ответы и ссылки на связанные вопросы. (Подход Java 7 кажется мне наиболее привлекательным, поскольку по умолчанию используются соглашения, специфичные для платформы, и вы можете указать собственную схему определения типа файла.)
Однако я хотел бы отметить, что ни один механизм не является полностью непогрешимым:
-
Методы, основанные на суффиксе файла, будут обмануты, если суффикс нестандартный или неправильный.
-
Методы, которые полагаются на атрибуты файла (например, в файловой системе), будут обмануты, если файл имеет неверный атрибут типа содержимого или его нет вообще.
-
Методы, основанные на проверке сигнатуры файла, могут быть обмануты двоичными файлами, которые просто имеют одинаковые байты сигнатуры.
-
Даже простая попытка прочитать файл как изображение может быть обманута, если вам не повезло... в зависимости от формата (ов) изображений, которые вы пытаетесь.
Ответ 7
import javax.activation.MimetypesFileTypeMap;
import java.io.File;
class Untitled
{
public static void main(String[] args)
{
String filepath = "/the/file/path/image.jpg";
File f = new File(filepath);
String mimetype= new MimetypesFileTypeMap().getContentType(f);
if(mimetype.startsWith("image/"))
System.out.println("It an image");
else
System.out.println("It NOT an image");
}
}
Ответ 8
Вы также можете использовать этот способ, если хотите проверить изображения с помощью ограниченных расширений. Но вам нужно жестко расширять код, который вы хотите фильтровать.
public static boolean isImage(String filepath) {
String[] extensions = {".jpg",".png"};
for (String extension : extensions) {
if(filepath.endsWith(extension)){
System.out.println("Its an image");
return true;
}
}
return false;
Но я рекомендую этот путь,
public static boolean isImage(String filepath) throws IOException {
File f = new File(filepath);
return (ImageIO.read(f) != null);
}