Apache Tika-Core 2.6.0中BodyContentHandler解析内容始终为空求助
问题原因及解决方案
核心原因
- 依赖缺失:tika-core-2.6.0仅包含Tika的核心框架,不包含任何具体文件格式的解析器(比如PDF解析器)。旧版tika-app-1.1是打包了所有解析器的完整包,所以之前能正常解析PDF;换成tika-core后,因缺少对应格式的解析模块,AutoDetectParser无法找到合适的解析器处理文件,自然无法生成内容。
- 代码变量错误:你的代码中获取的流对象是
stream,但判断非空的却是未关联的documentByteArrayInput——如果这个变量为null,解析逻辑根本不会执行,直接导致handler为空。
修复步骤
1. 修正代码变量错误
将判断条件改为检查stream是否非空:
InputStream stream = MyClass.class.getResourceAsStream("test1.pdf"); // 修正变量名,匹配实际获取的流对象 if (stream != null) { Metadata metadata = new Metadata(); BodyContentHandler handler= new BodyContentHandler(-1); AutoDetectParser parser= new AutoDetectParser(); parser.parse(stream, handler, metadata); String doc= handler.toString().replaceAll("\\s+", ""); int charsNo= doc.length(); }
2. 添加必要的解析器依赖
tika-core本身不提供具体格式的解析能力,需要按需添加解析模块:
- 若需支持PDF及大部分常见格式,添加标准解析器包:
<dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-parsers-standard-package</artifactId> <version>2.6.0</version> </dependency>
- 若仅需PDF解析,可单独添加PDF解析模块:
<dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-parsers-pdf-module</artifactId> <version>2.6.0</version> </dependency>
3. 验证解析状态
解析后可打印文件类型,确认解析器是否正常加载:
// 解析完成后添加此行,检查是否正确识别文件类型 System.out.println("文件类型:" + metadata.get(Metadata.CONTENT_TYPE));
若输出application/pdf,说明解析器已正常工作,此时handler应能获取到文件内容。
内容的提问来源于stack exchange,提问作者komplRX
相关产品推荐
相关产品推荐

