在Android Studio中使用Java实现选择.doc文件并提取文本的方法
Android Java 端提取DOC文件文本的实现方案
1. 前置功能:文件选择实现
- 适配Android 11(API 30)及以上版本:直接使用
Activity Result API调用系统文件选择器,过滤MIME类型为application/msword即可选中DOC文件,无需申请额外存储权限。 - 适配Android 10及以下版本:先动态申请
READ_EXTERNAL_STORAGE存储权限,再调用文件选择器获取目标文件的Uri。
2. DOC文本提取核心方案
方案一:裁剪版Apache POI 本地解析
原生Apache POI包体积过大,安卓端推荐使用社区裁剪适配的版本,避免包体积过度膨胀
- 首先在模块级
build.gradle中引入适配依赖:
implementation 'com.github.SUPERCILEX.poi-android:poi:3.17' implementation 'com.github.SUPERCILEX.poi-android:poi-ooxml:3.17'
- 提取文本的核心代码示例:
// 仅示例逻辑,实际开发需添加异常捕获、资源关闭、子线程执行逻辑 InputStream inputStream = getContentResolver().openInputStream(targetFileUri); HWPFDocument doc = new HWPFDocument(inputStream); WordExtractor extractor = new WordExtractor(doc); String extractedText = extractor.getText(); // 依次关闭extractor、doc、inputStream资源
- 特点:离线可用,DOC格式解析准确率高,适配绝大多数文档场景;包体积会增加3~5M左右。
方案二:轻量原生解析库解析
如果对包体积要求极高,可以选择集成封装了antiword的安卓原生适配库,通过底层C代码完成DOC解析
- 特点:包体积增量不到1M,解析速度快;对包含复杂表格、大量嵌入资源的DOC文件解析准确率低于POI方案。
方案三:后端中转解析
如果应用自带后端服务,可将选中的DOC文件上传至后端,由后端完成解析后返回文本结果到移动端
- 特点:不占用移动端包体积,解析逻辑统一在后端维护更方便;必须联网才能使用,需要额外开发后端解析接口。
注意:所有文件IO操作、解析逻辑都必须放在子线程执行,避免阻塞主线程触发ANR,操作完成后需及时释放资源避免内存泄漏。
内容的提问来源于stack exchange,提问作者Tauseef Rehman
相关产品推荐
相关产品推荐

