在Java中获取文件的Mime类型

在Java中获取文件的Mime类型

我只是想知道大多数人是如何从Java文件中获取MIME类型的?到目前为止,我已经尝试了两种用途:JMimeMagic & Mime-Util.

第一个给了我内存异常,第二个没有正确关闭它的流。我只是想知道其他人是否有他们正确使用和工作的方法/库?


慕标琳琳
浏览 2002回答 4
4回答

森林海

在Java 7中,您现在只需使用Files.probeContentType(path).

HUH函数

不幸的是,mimeType = file.toURL().openConnection().getContentType();不起作用,因为这种使用URL会使文件被锁定,因此,例如,它是不可删除的。但是,您有以下情况:mimeType= URLConnection.guessContentTypeFromName(file.getName());还有以下内容,它的优点不仅仅是使用文件扩展名,还可以查看内容。InputStream is = new BufferedInputStream(new FileInputStream(file));mimeType = URLConnection.guessContentTypeFromStream(is);  //...close stream然而,正如上面的注释所建议的,MIME类型的内置表是相当有限的,不包括,例如MSWord和PDF。因此,如果您想进行泛化,您将需要超越内置库,例如使用Mime-Util(这是一个很好的库,使用文件扩展名和内容)。

芜湖不芜

JAFAPI是JDK 6的一部分。看javax.activation包裹。最有趣的类是javax.activation.MimeType-一个实际的MIME型保持架-和javax.activation.MimetypesFileTypeMap-类,其实例可以将MIME类型解析为文件的字符串:String fileName = "/path/to/file";MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap();// only by file nameString mimeType = mimeTypesMap.getContentType(fileName);// or by actual File instanceFile file = new File(fileName);mimeType = mimeTypesMap.getContentType(file);

胡说叔叔

你只需要三行代码:File file = new File("/path/to/file");Tika tika = new Tika();System.out.println(tika.detect(file));如果您有一个Groovy控制台,只需粘贴并运行以下代码即可:@Grab('org.apache.tika:tika-core:1.14')import org.apache.tika.Tika;def tika = new Tika()def file = new File("/path/to/file")println tika.detect(file)记住,它的API很丰富,它可以解析“任何东西”。在TIKA-CORE 1.14中,您有:String  detect(byte[] prefix)String  detect(byte[] prefix, String name)String  detect(File file)String  detect(InputStream stream)String   detect(InputStream stream, Metadata metadata)String  detect(InputStream stream, String name)String  detect(Path path)String    detect(String name)String  detect(URL url)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java