Java獲取文件ContentType案例
源碼如下:
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:\\Users\\admin\\Desktop\\tttt.rar"; // 方式一 getContentTypeByLocal(fileUrl); // 方式二,推薦使用 getContentType(fileUrl); // 方式三 getContentTypeByType(fileUrl); } /** * 方式一 * 該方式只支持本地文件,有時(shí)候會(huì)存在獲取為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遠(yuǎn)程文件 * @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,有時(shí)候會(huì)存在獲取為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; } }
打印效果圖:
補(bǔ)充知識(shí):ImageTypeUtil工具類(lèi):Java獲取URL對(duì)應(yīng)的文件類(lèi)型及其后綴
Java獲取URL對(duì)應(yīng)的文件類(lèi)型及其后綴的主流方法有三種:
1、根據(jù)文件頭部數(shù)據(jù)來(lái)判斷。
通常需要先下載再判斷,但是如果想要在下載的時(shí)候確定文件后綴,就做不到了,而且獲取的文件類(lèi)型不是很準(zhǔn)確。
2、使用lastIndexOf去解析url字符串。
這種方法最簡(jiǎn)單高效。
3、UrlConnection獲取ContentType的類(lèi)型推測(cè)出文件的類(lèi)型。
這里我封裝了一個(gè)工具類(lèi),將第二種方法和第三種方法結(jié)合,但是不是用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"),//標(biāo)簽圖像文件格式(Tagged Image File Format,簡(jiǎn)寫(xiě)為T(mén)IFF)是一種主要用來(lái)存儲(chǔ)包括照片和藝術(shù)圖在內(nèi)的圖像的文件格式。它最初由Aldus公司與微軟公司一起為PostScript打印開(kāi)發(fā)。 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類(lèi)型, /** * 后綴名 */ 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類(lèi)型對(duì)應(yīng)的后綴名 */ 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 指定類(lèi)型的后綴名,如'.mp4' */ public String suffix() { return this.mSuffix; } }
以上這篇Java獲取文件ContentType案例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud Gateway的熔斷限流配置實(shí)現(xiàn)方法
Spring Cloud Gateway支持通過(guò)配置熔斷和限流機(jī)制來(lái)保證服務(wù)的穩(wěn)定性和可用性,可通過(guò)Hystrix和Resilience4j兩種方式實(shí)現(xiàn)。Hystrix通過(guò)注解和配置文件實(shí)現(xiàn)熔斷限流,Resilience4j通過(guò)編程式配置實(shí)現(xiàn)2023-04-04使用java實(shí)現(xiàn)各種數(shù)據(jù)統(tǒng)計(jì)圖(柱形圖,餅圖,折線(xiàn)圖)
用Jfree實(shí)現(xiàn)條形柱狀圖表,java代碼實(shí)現(xiàn)??山?jīng)常用于報(bào)表的制作,代碼自動(dòng)生成后可以自由查看。可以自由配置圖表的各個(gè)屬性,用來(lái)達(dá)到自己的要求和目的。本文給大家介紹使用java實(shí)現(xiàn)各種數(shù)據(jù)統(tǒng)計(jì)圖(柱形圖,餅圖,折線(xiàn)圖),需要的朋友可以參考下2015-10-10java實(shí)現(xiàn)員工工資管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)員工工資管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02剖析Java中在Collection集合中使用contains和remove為什么要重寫(xiě)equals
這篇文章主要介紹了Collection集合的contains和remove方法詳解remove以及相關(guān)的經(jīng)驗(yàn)技巧,通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09Java之mybatis使用limit實(shí)現(xiàn)分頁(yè)案例講解
這篇文章主要介紹了Java之mybatis使用limit實(shí)現(xiàn)分頁(yè)案例講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08Java實(shí)現(xiàn)Map集合二級(jí)聯(lián)動(dòng)示例
Java實(shí)現(xiàn)Map集合二級(jí)聯(lián)動(dòng)示例,需要的朋友可以參考下2014-03-03Spring Boot實(shí)現(xiàn)郵件發(fā)送功能
這篇文章主要為大家詳細(xì)介紹了Spring Boot實(shí)現(xiàn)郵件發(fā)送功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Java常見(jiàn)延遲隊(duì)列的實(shí)現(xiàn)方案總結(jié)
Java延遲隊(duì)列(DelayQueue)是Java并發(fā)包中的一個(gè)類(lèi),它實(shí)現(xiàn)了BlockingQueue接口,且其中的元素必須實(shí)現(xiàn)Delayed接口,延遲隊(duì)列中的元素按照延遲時(shí)間的長(zhǎng)短進(jìn)行排序,本文給大家介紹了Java常見(jiàn)延遲隊(duì)列的實(shí)現(xiàn)方案總結(jié),需要的朋友可以參考下2024-03-03