此代码运行良好,但它只检测JPG而不是PNG
public String[] getImageFileList(String path_to_directory){
File file = new File(path_to_directory);
if(!file.exists())return null;
String[] images = file.list(new FilenameFilter() {
@Override
public boolean accept(File current, String name) {
boolean result;
File file = new File(current, name);
String mimeType = new MimetypesFileTypeMap().getContentType(file).split("/")[0];
result = mimeType.equals("image");
return result;
}
});
return images;
}
如何让它检测到PNG图像呢?
编辑:当仔细检查"结果"将成为"图像"对于JPG和"应用程序"对于PNG。我是否正确地猜测PNG不是唯一具有该应用程序的文件类型" mime类型?
答案 0 :(得分:2)
可以通过定义要在MimetypesFileTypeMap中查找的文件类型来解决问题,如下所示:
MimetypesFileTypeMap mtftp = new MimetypesFileTypeMap();
mtftp.addMimeTypes("image png jpg jpeg")
然后得到的功能代码如下:
public String[] getImageFileList(String path_to_directory){
File file = new File(path_to_directory);
if(!file.exists())return null;
String[] images = file.list(new FilenameFilter() {
@Override
public boolean accept(File current, String name) {
boolean result;
File file = new File(current, name);
MimetypesFileTypeMap mftp = new MimetypesFileTypeMap();
mftp.addMimeTypes("image png jpg jpeg");
String mimeType = mftp.getContentType(file).split("/")[0];
result = mimeType.equals("image");
System.out.println(mimeType);
return result;
}
});
return images;
}
答案 1 :(得分:0)
如果要检测图像文件,则需要读取前几个字节并检测其签名。大多数图像格式(包括JPEG和PNG)在文件头上都有独特的结构。
答案 2 :(得分:0)
通常,文件的mime类型为:
PNG:image / png
JPG:image / jpg
...
您可以找到完整列表here。
在您的代码中,在检查mime类型时,我认为您有一些png文件没有表示为“image / png”而是我认为它们是“application / octet-stream”或类似的东西。当您通过互联网上传或下载文件时,该文件可以在网络上获取mime类型为“application / octet-stream”。
或者,
您的应用程序无法获取文件的正确mime类型。
在this answer,表示如果没有将文件类型正确设置到MimetypesFileTypeMap实例,则可能总是将mime类型设置为“application / octet-stream”。所以解决方案是将所需的文件类型设置为MimetypesFileTypeMap实例,如下所示:
MimetypesFileTypeMap mtftp = new MimetypesFileTypeMap();
mtftp.addMimeTypes("image png jpeg jpg");
然后我认为你的程序将开始正确检测png文件的mime类型。