判斷java文件類型TikaToolKit的實(shí)例
引入依賴
<dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-core</artifactId> <version>1.20</version> </dependency>
或
compile 'org.apache.tika:tika-core:1.20'
工具類
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.tika.metadata.HttpHeaders;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.metadata.TikaMetadataKeys;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.xml.sax.helpers.DefaultHandler;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* tika
*
* @author zhy
*/
@Slf4j
public class TikaToolUtil {
/**
* 獲取類型
*
* @param file 文件
* @return String
*/
public static String getMimeType(File file) {
if (file.isDirectory()) {
return "the target is a directory";
}
AutoDetectParser parser = new AutoDetectParser();
parser.setParsers(new HashMap<>());
Metadata metadata = new Metadata();
metadata.add(TikaMetadataKeys.RESOURCE_NAME_KEY, file.getName());
try (InputStream stream = new FileInputStream(file)) {
parser.parse(stream, new DefaultHandler(), metadata, new ParseContext());
} catch (Exception e) {
log.error(e.getMessage());
}
return metadata.get(HttpHeaders.CONTENT_TYPE);
}
/**
* 判斷是否是圖片
*
* @param file 文件
* @return boolean
*/
public static boolean isImage(File file) {
String type = getMimeType(file);
System.out.println(type);
Pattern p = Pattern.compile(Type.IMAGE.name);
Matcher m = p.matcher(type);
return m.matches();
}
/**
* 判斷是否是zip
*
* @param file 文件
* @return boolean
*/
public static boolean isZip(File file) {
String type = getMimeType(file);
System.out.println(type);
Pattern p = Pattern.compile(Type.ZIP.name);
Matcher m = p.matcher(type);
return m.matches();
}
/**
* 判斷是否是dicom
*
* @param file 文件
* @return boolean
*/
public static boolean isDicom(File file) {
String type = getMimeType(file);
Pattern p = Pattern.compile(Type.DCM.name);
Matcher m = p.matcher(type);
return m.matches();
}
/**
* 類型枚舉
*/
@Getter
@AllArgsConstructor
public enum Type {
/**
* dcm
*/
DCM("application/dicom"),
/**
* zip
*/
ZIP("application/zip"),
/**
* 圖片
*/
IMAGE("image/.*"),
/**
* 視頻
*/
VIDEO("video/*");
private String name;
}
public static void main(String[] args) {
boolean image = isImage(new File("C:\\Users\\zhy\\Desktop\\dcm\\123.dcm"));
System.out.println("zhy:" + image);
}
}
補(bǔ)充知識:java根據(jù)文件流判斷文件類型(后綴名)
我就廢話不多說了,大家還是直接看代碼吧~
import java.io.FileInputStream;
public class FileType{
public static String bytesToHexString(byte[] src) {
StringBuilder stringBuilder = new StringBuilder();
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
}
/**
* @param args
*/
public static void main(String[] args) throws Exception {
FileInputStream is = new FileInputStream("F:\\相冊\\微信圖片\\03.jpg");
byte[] b = new byte[3];
is.read(b, 0, b.length);
String xxx = bytesToHexString(b);
xxx = xxx.toUpperCase();
System.out.println("頭文件是:" + xxx);
String ooo = TypeDict.checkType(xxx);
System.out.println("后綴名是:" + ooo);
}
}
public class TypeDict {
/**
常用文件的文件頭如下:(以前六位為準(zhǔn))
JPEG (jpg),文件頭:FFD8FF
PNG (png),文件頭:89504E47
GIF (gif),文件頭:47494638
TIFF (tif),文件頭:49492A00
Windows Bitmap (bmp),文件頭:424D
CAD (dwg),文件頭:41433130
Adobe Photoshop (psd),文件頭:38425053
Rich Text Format (rtf),文件頭:7B5C727466
XML (xml),文件頭:3C3F786D6C
HTML (html),文件頭:68746D6C3E
Email [thorough only] (eml),文件頭:44656C69766572792D646174653A
Outlook Express (dbx),文件頭:CFAD12FEC5FD746F
Outlook (pst),文件頭:2142444E
MS Word/Excel (xls.or.doc),文件頭:D0CF11E0
MS Access (mdb),文件頭:5374616E64617264204A
WordPerfect (wpd),文件頭:FF575043
Postscript (eps.or.ps),文件頭:252150532D41646F6265
Adobe Acrobat (pdf),文件頭:255044462D312E
Quicken (qdf),文件頭:AC9EBD8F
Windows Password (pwl),文件頭:E3828596
ZIP Archive (zip),文件頭:504B0304
RAR Archive (rar),文件頭:52617221
Wave (wav),文件頭:57415645
AVI (avi),文件頭:41564920
Real Audio (ram),文件頭:2E7261FD
Real Media (rm),文件頭:2E524D46
MPEG (mpg),文件頭:000001BA
MPEG (mpg),文件頭:000001B3
Quicktime (mov),文件頭:6D6F6F76
Windows Media (asf),文件頭:3026B2758E66CF11
MIDI (mid),文件頭:4D546864
*/
public static String checkType(String xxxx) {
switch (xxxx) {
case "FFD8FF": return "jpg";
case "89504E": return "png";
case "474946": return "jif";
default: return "0000";
}
}
}
以上這篇判斷java文件類型TikaToolKit的實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot使用自動配置xxxAutoConfiguration
這篇文章介紹了SpringBoot自動配置xxxAutoConfiguration的使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
使用JWT作為Spring?Security?OAuth2的token存儲問題
這篇文章主要介紹了使用JWT作為Spring?Security?OAuth2的token存儲,大家經(jīng)常使用的方法有兩種一種是使用JWT作為Token傳遞,一種是使用Redis存儲Token,資源服務(wù)器本地訪問Redis校驗(yàn)Token,需要的朋友可以參考下2021-12-12
BeanFactory與ApplicationContext的區(qū)別示例解析
這篇文章主要為大家介紹了BeanFactory與ApplicationContext的區(qū)別示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
SpringBoot webSocket實(shí)現(xiàn)發(fā)送廣播、點(diǎn)對點(diǎn)消息和Android接收
這篇文章主要介紹了SpringBoot webSocket實(shí)現(xiàn)發(fā)送廣播、點(diǎn)對點(diǎn)消息和Android接收,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03
Java?20在Windows11系統(tǒng)下的簡易安裝教程
這篇文章主要給大家介紹了關(guān)于Java?20在Windows11系統(tǒng)下的簡易安裝教程,學(xué)習(xí)Java的同學(xué),第一步就是安裝好Java環(huán)境,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07

