Tika工具包-搞定上千种文件解析
阿昌 Java小菜鸡

Tika工具包-搞定上千种文件解析

hi,我是阿昌,今天分享学习的是 Apache Tika ;

它可从一千多种不同文件类型(例如ppt、xls、pdf、xmind、cad等)中提取解析出元数据和文本。
如果你有对如上文件类型进行提取分析的需求,不凡试试这个框架。
那这里本次使用java语言进行演示demo。

以下基于演示测试:

  • jdk:1.8
  • tika:2.9.1
  • springboot:2.1.0

一、包依赖

那本身Tika在实际使用情况下不难,只需要引入2个依赖:
分别是tika的核心包和一个tika的标准解析器包;

  • 核心包:提供了tika核心api和基本的解析框架
  • 标准解析器包:各种文件格式的具体解析器实现,tika社区中还有各种更小众文件的解析实现;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-core</artifactId>
    <version>2.9.1</version>
    </dependency>
    <dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-parsers-standard-package</artifactId>
    <version>2.9.1</version>
    </dependency>

二、tika核心方法

  • detect:获取文件类型

    1
    2
    3
    public String detect(InputStream stream) throws IOException {
    return this.detect(stream, new Metadata());
    }
  • parseToString:获取文本

    1
    2
    3
    public String parseToString(InputStream stream) throws IOException, TikaException {
    return this.parseToString(stream, new Metadata());
    }

三、demo代码

1
2
3
4
5
@PostMapping("parseFileInfo")
public ResponseEntity<?> parseFileInfo(MultipartFile file){
Map<String, Object> pareseMap = tikaService.processFile(file);
return ResponseEntity.ok(pareseMap);
}
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
/**
* @author achang
* @date 2025/10/4 - 22:38
**/
@Service
public class TikaServiceImpl implements TikaService {

private final Tika tikaClient = new Tika();

public String detectFileType(InputStream inputStream) throws IOException {
return tikaClient.detect(inputStream);
}

public String extractText(InputStream inputStream) throws IOException, TikaException {
return tikaClient.parseToString(inputStream);
}

public Map<String, String> extractMetaData(InputStream inputStream, String fileName) throws IOException, TikaException {
Metadata metadata = new Metadata();
metadata.set("resourceName", fileName);
tikaClient.parseToString(inputStream, metadata);
Map<String, String> metadataMap = new HashMap<>();
for (String name : metadata.names()) {
metadataMap.put(name, metadata.get(name));
}
return metadataMap;
}

public Map<String, Object> processFile(MultipartFile file) {
Map<String, Object> hashMap = new HashMap<>();

//提取文件类型
String fileType = detectFileType(file.getInputStream());
hashMap.put("fileType", fileType);

//提取文本
String content = extractText(file.getInputStream());
hashMap.put("content", content);

//提取元数据
Map<String, String> metadata = extractMetaData(file.getInputStream(), file.getOriginalFilename());
hashMap.put("metadata", metadata);


return hashMap;
}

}

通过http调用传输不同的文件查看解析效果⬇️

postman调用信息:

image

md文件:
image

xls文件:
image

txt文件:

image
xmind文件:

image

doc文件:
image

 请作者喝咖啡