判断java文件类型TikaToolKit的实例
作者:会迟到但不会缺席 发布时间:2021-06-29 02:31:09
标签:java,文件,TikaToolKit
引入依赖
<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);
}
}
补充知识:java根据文件流判断文件类型(后缀名)
我就废话不多说了,大家还是直接看代码吧~
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 {
/**
常用文件的文件头如下:(以前六位为准)
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";
}
}
}
来源:https://blog.csdn.net/qq_27721169/article/details/107865356
0
投稿
猜你喜欢
- 闲来无事,做了一个简单的抽奖转盘的ui实现,供大家参考package com.microchange.lucky; import andro
- 过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来
- 结构:安装NuGet包:using SAP.Middleware.Connector;using System.Data;namespace
- 导读Spring Boot应用可以使用spring-boot-maven-plugin快速打包,构建一个可执行jar。Spring Boot
- 相信你也遇到过这种场景,判断二级目录属于哪个一级目录,一个员工属于哪个上级员工领导…当Mybatis遇上目录树,有哪些解决方法?一般来说,有
- 前言前段时间学习Chart控件,对Chart控件的,怕以后忘记,所以总结一下自己的学习成果,怕以后忘记方便自己下次复习。这篇文章只是学习的文
- 采用继承Thead类实现多线程:优势:编写简单,如果需要访问当前线程,只需使用this即可,无需使用Thead.currentThread(
- 我们可能会用各种应用服务部署我们的Java应用,比如Tomcat、WAS、weblogic等。Tomcat和WAS可能会比较少遇到一些奇怪的
- 我们还是用一个小例子来看看自定义View和自定义属性的使用,带大家来自己定义一个带进度的圆形进度条,我们还是先看一下效果吧从上面可以看出,我
- 先创建一个title.xml<LinearLayout xmlns:android="http:/
- 在用C#开发windows端程序并连接SQL Server时有可能会遇到数据库登录失败的问题,报错现象如下图所示:报错信息如下:System
- springboot @ConfigurationProperties和@PropertySource区别@ConfigurationPro
- 前言此前部门内的一个线上系统上线后内存一路飙高、一段时间后直接占满。协助开发人员去分析定位,发现内存中某个Object的量远远超出了预期的范
- 本文实例讲述了C#实现char字符数组与字符串相互转换的方法。分享给大家供大家参考,具体如下:一、字符串转换为字符数组char[] temp
- 本文实例讲述了java中static关键字用法,分享给大家供大家参考。具体分析如下:一、介绍:1、在类中,用static声明的成员变量为静态
- 目录1.概览2.自定义枚举方法3.使用 == 比较枚举类型4.在 switch 语句中使用枚举类型5.枚举类型的属性,方法和构造函数6.En
- Android ViewGroup中的Scroller与computeScroll的有什么关系?答:没有直接的关系知道了答案,是不是意味着下
- 1、Swagger是啥Swagger 是一个用于生成、描述和调用 RESTful 接口的 Web 服务。通俗的来讲,Swagger
- 当只需要两个图像合并的时候,可以简单的使用gdi+,把两个图像画到一个画布上面实现合并bitmap.当需要将许多bitmap合并时,由于bi
- 这篇文章主要介绍了Java实现inputstream流的复制代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习