源码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
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);
}
/**
* 方式一
* 该方式只支持本地文件,有时候会存在获取为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;
}
}
|
打印效果图:
补充知识:ImageTypeUtil工具类:Java获取URL对应的文件类型及其后缀
Java获取URL对应的文件类型及其后缀的主流方法有三种:
1、根据文件头部数据来判断。
通常需要先下载再判断,但是如果想要在下载的时候确定文件后缀,就做不到了,而且获取的文件类型不是很准确。
2、使用lastIndexOf去解析url字符串。
这种方法最简单高效。
3、UrlConnection获取ContentType的类型推测出文件的类型。
这里我封装了一个工具类,将第二种方法和第三种方法结合,但是不是用lastIndexOf,而是判断url字符串是否包含图片的后缀。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
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案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/p812438109/article/details/83587315