您的位置:首页技术文章
文章详情页

Java获取文件ContentType案例

【字号: 日期:2022-08-26 10:54:09浏览:3作者:猪猪

源码如下:

package com.oysept; import java.io.File;import java.io.IOException;import java.net.FileNameMap;import java.net.URLConnection;import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Paths; import javax.activation.MimetypesFileTypeMap; /** * Java获取文件ContentType * @author ouyangjun */public class ContentTypeUtils { public static void main(String[] args) { // 文件路径 String fileUrl = 'C:UsersadminDesktoptttt.rar'; // 方式一 getContentTypeByLocal(fileUrl);// 方式二,推荐使用 getContentType(fileUrl); // 方式三 getContentTypeByType(fileUrl); } /** * 方式一 * 该方式只支持本地文件,有时候会存在获取为null的情况 * @param fileUrl */ public static String getContentTypeByLocal(String fileUrl) { String contentType = null; Path path = Paths.get(fileUrl); try { contentType = Files.probeContentType(path); } catch (IOException e) { e.printStackTrace(); } System.out.println('getContentTypeByLocal, File ContentType is : ' + contentType); return contentType; } /** * 方式二 * 该方式支持本地文件,也支持http/https远程文件 * @param fileUrl */ public static String getContentType(String fileUrl) { String contentType = null; try { contentType = new MimetypesFileTypeMap().getContentType(new File(fileUrl)); } catch (Exception e) { e.printStackTrace(); } System.out.println('getContentType, File ContentType is : ' + contentType); return contentType; } /** * 方式三 * @param fileUrl,有时候会存在获取为null的情况 */ public static String getContentTypeByType(String fileUrl) { String contentType = null; try { FileNameMap fileNameMap = URLConnection.getFileNameMap(); contentType = fileNameMap.getContentTypeFor(fileUrl); } catch (Exception e) { e.printStackTrace(); } System.out.println('getContentTypeByType, File ContentType is : ' + contentType); return contentType; }}

打印效果图:

Java获取文件ContentType案例

补充知识:ImageTypeUtil工具类:Java获取URL对应的文件类型及其后缀

Java获取URL对应的文件类型及其后缀的主流方法有三种:

1、根据文件头部数据来判断。

通常需要先下载再判断,但是如果想要在下载的时候确定文件后缀,就做不到了,而且获取的文件类型不是很准确。

2、使用lastIndexOf去解析url字符串。

这种方法最简单高效。

3、UrlConnection获取ContentType的类型推测出文件的类型。

这里我封装了一个工具类,将第二种方法和第三种方法结合,但是不是用lastIndexOf,而是判断url字符串是否包含图片的后缀。

package johny.utils; import java.net.URLConnection; /** * @author Johny 林子豪 */public enum ImageTypeUtil { PNG('.png', 'image/png'), JPG('.jpg', 'image/jpeg'), BMP('.bmp', 'image/bmp'), JPEG('.jpeg', 'image/jpeg'), GIF('.gif', 'image/gif'), TIF('.tif', 'image/tiff'),//标签图像文件格式(Tagged Image File Format,简写为TIFF)是一种主要用来存储包括照片和艺术图在内的图像的文件格式。它最初由Aldus公司与微软公司一起为PostScript打印开发。 TIFF('.tiff', 'image/tiff'), FAX('.fax', 'image/fax'), ICO('.ico', 'image/x-icon'), JFIF('.jfif', 'image/jpeg'), JPE('.jpe', 'image/jpeg'), NET('.net', 'image/pnetvue'), WBMP('.wbmp', 'image/vnd.wap.wbmp'); //如果有其他的mime类型, /** * 后缀名 */ final String mSuffix; final String mMIME; ImageTypeUtil(String suffix, String mime) { this.mSuffix = suffix; this.mMIME = mime; } public static String getSuffixFromUrl(String url) { for (ImageTypeUtil fileType : values()) { if (url.contains(fileType.suffix())) {return fileType.suffix(); } } String contentType = getMIMETypeFromUrl(url); if (contentType == null) return null; return mimeMapingSuffix(contentType); } public static String getMIMETypeFromUrl(String url) { if (url == null || url.isEmpty()) { return null; } return URLConnection.guessContentTypeFromName(url); } /** * mime类型对应的后缀名 */ public static String mimeMapingSuffix(String mime) { for (ImageTypeUtil fileType : values()) { if (fileType.mime().equals(mime)) {return fileType.suffix(); } } return null; } public String mime() { return mMIME; } /** * 获取后缀名 * * @return 指定类型的后缀名,如’.mp4’ */ public String suffix() { return this.mSuffix; } }

以上这篇Java获取文件ContentType案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持好吧啦网。

标签: Java
相关文章: