java读取txt,doc,docx文档格式的文本内容

 读取txt,doc,docx文档格式的文本内容,通过不同格式,读取逻辑不同,避免造成文本内容乱码问题,

这里需要安装Maven:

版本最好统一

  <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.3</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>5.2.3</version></dependency>
    /*** 根据文本不同的编码格式拿到文本内容* @param file* @return* @throws IOException*/    
private String getContent(MultipartFile file) throws IOException {String fileName = file.getOriginalFilename();if (fileName != null) {if (fileName.endsWith(".txt")) {return readTextFile(file.getBytes());} else if (fileName.endsWith(".doc")) {return readDocFile(file);} else if (fileName.endsWith(".docx")) {return readDocxFile(file);}}return "";}/*** 文本编码格式*/private static final List<Charset> FALLBACK_ENCODINGS = Arrays.asList(StandardCharsets.UTF_8,Charset.forName("GBK"),Charset.forName("GB2312"),StandardCharsets.ISO_8859_1);/*** 读取txt格式的文件* @param fileBytes* @return*/private  String readTextFile(byte[] fileBytes) {// 使用 UniversalDetector 检测文件编码UniversalDetector detector = new UniversalDetector(null);detector.handleData(fileBytes, 0, fileBytes.length);detector.dataEnd();String encoding = detector.getDetectedCharset();if (encoding != null) {String content = new String(fileBytes, Charset.forName(encoding));if (isValidContent(content)) {return content;}}// 尝试使用多种常见编码解析文件内容for (Charset charset : FALLBACK_ENCODINGS) {String content = new String(fileBytes, charset);if (isValidContent(content)) {return content;}}// 如果所有尝试都失败,返回默认的 UTF-8 编码内容return new String(fileBytes, StandardCharsets.UTF_8);}/*** 读取doc格式的文件* @param file* @return* @throws IOException*/private static String readDocFile(MultipartFile file) throws IOException {try (InputStream inputStream = file.getInputStream();HWPFDocument doc = new HWPFDocument(inputStream)) {WordExtractor extractor = new WordExtractor(doc);return extractor.getText();}}/*** 读取docx格式的文件* @param file* @return* @throws IOException*/private String readDocxFile(MultipartFile file) throws IOException {InputStream inputStream = file.getInputStream();XWPFDocument docx = new XWPFDocument(inputStream);XWPFWordExtractor extractor = new XWPFWordExtractor(docx);String content = extractor.getText();docx.close();inputStream.close();return content;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/33610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter插件管理器,websocket协议,Jmeter连接数据库,测试报告的查看

目录 1、Jmeter插件管理器 1、Jmeter插件管理器用处&#xff1a;Jmeter发展并产生大量优秀的插件&#xff0c;比如取样器、性能监控的插件工具等。但要安装这些优秀的插件&#xff0c;需要先安装插件管理器。 2、插件的下载&#xff0c;从Availabale Plugins中选择&#xff…

day 65 图论part02 99.岛屿数量 深搜 99.岛屿数量 广搜 100.岛屿的最大面积

99.岛屿数量 深搜 每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 本题思路&#xff0c;是用遇到一个没有遍历过的节点陆地&#xff0c;计数器就加一&#xff0c;然后把该节点陆地所能遍历到的陆地都标记上。 在遇到标记过的陆地节点和海洋节点的时候直接跳过…

Vue3 响应式 reactive全家桶

reactive()与ref()的区别和连续 ref和reactive都是把变量变成响应式对象 reactive底层使用了泛型约束&#xff0c;只能对引用类型使用。 而ref支持所有的类型&#xff0c;ref取值和赋值都需要 .value 而reactive 不需要 对象 <template><div><form><…

【运维】在 Docker 容器中指定 UTF-8 编码:方法与技巧

在 Docker 容器中指定 UTF-8 编码&#xff1a;方法与技巧 在日常开发中&#xff0c;我们常常需要确保应用程序能正确处理各种字符编码&#xff0c;尤其是 UTF-8 编码。在 Docker 容器中运行应用程序时&#xff0c;正确设置字符编码尤为重要&#xff0c;因为容器通常是跨平台、…

达梦(DM8)数据库表空间的备份与还原(联机备份) 四

一、表空间的备份 1、备份表空间的命令操作 backup tablespace main backupset /home/dmdba/dmdata/DAMENG/bak/full_back_01 ; 2、检查表空间的备份文件 select sf_bakset_check(disk,/home/dmdba/dmdata/DAMENG/bak/full_back_01); 二、表空间的还原 1、修改表空间位脱机…

AI播客下载:Edge of AI (AI最新应用场景和发展趋势)

Edge of AI Podcast 是一个探讨人工智能&#xff08;AI&#xff09;最新应用和发展的播客。该播客由Ron Levy主持&#xff0c;他于2023年8月9日接任新主持人。每个节目都会邀请专家分享他们在AI领域的见解和经验&#xff0c;探索最新的应用场景和发展趋势。例如&#xff0c;在第…

PointCloudLib 法线微分算法(Don)分割点云 C++版本

0.实现效果 原始点云 不同尺度上计算法向量 计算出don特征量,并以颜色显示在点云上 可以看出平面中心的点 不涉及到周围点变化的点 特征量比较低,以红色表示 边缘过渡剧烈的点,特征量比较高,以蓝色表示 以Don算法特征量来作为阈值分割点云,可以分割出剧烈变化的点云 欧…

《Linux Vim急救手册:E138错误全攻略与故障排除秘籍》

标题&#xff1a;《Linux Vim急救手册&#xff1a;E138错误全攻略与故障排除秘籍》 引言 在Linux世界中&#xff0c;Vim是编辑器的瑞士军刀&#xff0c;以其轻量级、强大和灵活著称。然而&#xff0c;即使是最熟练的Vim用户也可能遇到令人头疼的E138错误。本文将深入探讨Vim …

国标GB28181视频汇聚平台EasyCVR设备展示数量和显示条数不符的原因排查与解决

国标GB28181/GA/T1400协议/安防综合管理系统EasyCVR视频汇聚平台能在复杂的网络环境中&#xff0c;将前端设备统一集中接入与汇聚管理。智慧安防/视频存储/视频监控/视频汇聚EasyCVR平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级…

WDF驱动开发-特定于KMDF的技术(三)

支持特殊文件 特殊文件 包括分页文件、转储文件和休眠文件。 如果驱动程序的目标设备是系统可能用于这些文件的存储设备&#xff0c;则驱动程序必须执行以下操作&#xff1a; 调用 WdfDeviceSetSpecialFileSupport 以启用或禁用对每种类型的特殊文件的支持。 默认情况下禁用每…

Django教程(002):模板语法的使用

目录 1 字符串2 列表3 字典4 列表中是字典5 if语句6 案例&#xff1a;使用爬虫爬取联通新闻并在页面渲染 模板语法本质上&#xff1a;在HTML中写一些占位符&#xff0c;由数据对这些占位符进行替换和处理。模板语法主要是方便对方法返回的数据在前端进行渲染&#xff0c;这些数…

什么野指针(c++)

野指针定义 野指针&#xff08;Wild Pointer&#xff09;是指向不确定位置或者非法地址的指针。当一个指针指向的内存被释放后&#xff0c;如果没有将其设置为NULL&#xff0c;那么这个指针就变成了野指针。使用野指针会导致未定义行为&#xff0c;可能引发程序崩溃或数据损坏…

【Proteus仿真】【Arduino单片机】寻迹避障蓝牙遥控小车

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使LCD1602液晶&#xff0c;L298电机&#xff0c;直流电机&#xff0c;HC05/06蓝牙模块&#xff0c;HCSR04超声波&#xff0c;红外寻迹模块等。 主…

grafana Not saving new dashboard due to restricted database access

报错 grafana 容器日志报错 logger=provisioning.dashboard t=2024-06-21T07:40:54.307719612Z level=warn msg="dashboards provisioning provider has no database write permissions because of duplicates" provider=default orgId=1

数据结构与算法-【算法专项】Hash算法-2(HashMap+设计Hash+Hash应用+Hashmap常用方法)

数据结构与算法-Hash算法-2 5 HashMap&#xff08;又双叒叕提到红黑树动态扩容&#xff09;6 如何设计Hash7 Hash的应用8 HashMap源码&#xff08;又双叒叕&#xff09;构造方法&#xff1a;put方法&#xff1a;get方法&#xff1a;equals方法&#xff1a;containsKey方法&…

C++初学者指南-2.输入和输出---命令行参数

C初学者指南-2.输入和输出—命令行参数 文章目录 C初学者指南-2.输入和输出---命令行参数1.这是什么&为什么这样&#xff1f;2.如何在C中访问3.转换为std::string、int......4.字符串到数字的转换函数5.命令行参数解析库 1.这是什么&为什么这样&#xff1f; 程序调用后…

说说 SSL 的错误认识和不足之处

最近明月在学习折腾 LNMP 期间无意中建了一个 Typecho 的博客小站&#xff0c;近一周的折腾下来&#xff0c;收获真的不少&#xff0c;致使兴趣也越来越浓了&#xff0c;在升级 LNMP 的时候捎带手的给这个 Typecho 博客也启用了 SSL。并且开启了 memcached 和 OPcache 优化加速…

C++在VS2022开发Windows窗口程序1:第一个win窗口程序

Windows操作系统是由微软公司开发和维护的一系列图形化操作系统的统称。Windows操作系统主要用于个人计算机、笔记本电脑、平板电脑、服务器等设备上。Windows起源于Microsoft-DOS模拟环境&#xff0c;相比于DOS的指令化模式&#xff0c;Windows采用图形化的模式&#xff0c;因…

OkHttp框架源码深度剖析【Android热门框架分析第一弹】

OkHttp介绍 OkHttp是当下Android使用最频繁的网络请求框架&#xff0c;由Square公司开源。Google在Android4.4以后开始将源码中的HttpURLConnection底层实现替换为OKHttp&#xff0c;同时现在流行的Retrofit框架底层同样是使用OKHttp的。 源码传送门 优点: 支持Http1、Http…

[保姆级教程]uniapp设置字体引入字体格式

文章目录 在 UniApp 中设置和引入自定义字体&#xff08;如 .ttf、.woff、.woff2 等格式&#xff09;通常涉及几个步骤。 准备字体文件&#xff1a; 首先&#xff0c;你需要有字体文件。这些文件通常以 .ttf、.woff 或 .woff2 格式提供。确保有权使用这些字体&#xff0c;并遵守…