您可以使用mime类型而不是尝试通过文件扩展名进行猜测,在某些情况下可能会丢失.以下是建立文件的mime类型的选项:
>使用javax.activation.MimetypesFileTypeMap,如:
System.out.println("Mime Type of " + f.getName() + " is " +
new MimetypesFileTypeMap().getContentType(f));
>使用java.net.URL
URL u = new URL(fileUrl);
URLConnection uc = u.openConnection();
type = uc.getContentType();
>使用Apache Tika
ContentHandler contenthandler = new BodyContentHandler();
Metadata metadata = new Metadata();
metadata.set(Metadata.RESOURCE_NAME_KEY, f.getName());
Parser parser = new AutoDetectParser();
// OOXMLParser parser = new OOXMLParser();
parser.parse(is, contenthandler, metadata);
System.out.println("Mime: " + metadata.get(Metadata.CONTENT_TYPE));
System.out.println("Title: " + metadata.get(Metadata.TITLE));
System.out.println("Author: " + metadata.get(Metadata.AUTHOR));
System.out.println("content: " + contenthandler.toString());
>使用JMimeMagic
MagicMatch match = parser.getMagicMatch(f);
System.out.println(match.getMimeType()) ;
>使用mime-util
Collection> mimeTypes = MimeUtil.getMimeTypes(f);
Droid (Digital Record Object Identification) is a software tool to
perform automated batch identification of file formats.
Aperture is an open source library and framework for crawling and indexing
information sources such as file systems, websites and mail boxes.
在这种情况下,最简单的方法是使用第一个解决方案javax.activation.MimetypesFileTypeMap,如:
MimetypesFileTypeMap mtft = new MimetypesFileTypeMap();
String mimeType = mtft.getContentType(ze.getName());
System.out.println(ze.getName()+" type: "+ mimeType);