申请注册网站域名.商城重庆市建设信息网站
申请注册网站域名.商城,重庆市建设信息网站,从WordPress源码恢复,兰州 网站建设文章目录 前言简介第一步#xff1a;引入依赖第二步#xff1a;编写文件解析处理类第三步#xff1a;Word解析类第四步#xff1a;PDF解析类第五步#xff1a;Txt解析类总结 前言
请各大网友尊重本人原创知识分享#xff0c;谨记本人博客#xff1a;南国以南i、 提示引入依赖第二步编写文件解析处理类第三步Word解析类第四步PDF解析类第五步Txt解析类总结 前言
请各大网友尊重本人原创知识分享谨记本人博客南国以南i、 提示以下是本篇文章正文内容下面案例可供参考
简介
在日常开发中我们经常会解析各类文件如.docx、pdf、txt 读取文件内容进行下一步逻辑处理本文例举解析上述文件
第一步引入依赖
友情链接创建Springboot 项目请移步 点我点我点我 dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.8.5/version/dependency!-- 提取pdf中的文字--dependencygroupIdcom.itextpdf/groupIdartifactIditextpdf/artifactIdversion5.5.6/version/dependency!--获取pdf文件的总页数--dependencygroupIdorg.apache.pdfbox/groupIdartifactIdpdfbox/artifactIdversion1.8.11/version/dependency!-- poi --dependencygroupIdorg.apache.poi/groupIdartifactIdpoi/artifactIdversion4.0.0/version/dependencydependencygroupIdorg.apache.poi/groupIdartifactIdpoi-ooxml/artifactIdversion4.0.0/version/dependencydependencygroupIdorg.apache.poi/groupIdartifactIdpoi-ooxml-schemas/artifactIdversion4.0.0/version/dependencydependencygroupIdorg.apache.poi/groupIdartifactIdpoi-scratchpad/artifactIdversion4.0.0/version/dependency!-- FileUtils依赖--dependencygroupIdcommons-io/groupIdartifactIdcommons-io/artifactIdversion2.4/version/dependency第二步编写文件解析处理类 // 定义静态的文件后缀private static final String SUFFIX_DOC .doc;private static final String SUFFIX_DOCX .docx;private static final String SUFFIX_PDF .pdf;private static final String SUFFIX_TXT .txt;/*** .* 根据文件类型解析文件内容** param file 文件* return 解析内容*/private static String readFileToString(File file) {StringBuilder readStr new StringBuilder();String fileType file.getName().substring(file.getName().lastIndexOf(.));log.debug(解析文件类型为[{}]文件, fileType);switch (fileType) {case SUFFIX_DOC: {readStr.append(WordUtil.readWord(SUFFIX_DOC, file.getAbsolutePath()));break;}case SUFFIX_DOCX: {readStr.append(WordUtil.readWord(SUFFIX_DOCX, file.getAbsolutePath()));break;}case SUFFIX_PDF: {readStr.append(PDFToWordUtil.getTextFromPdf(file.getAbsolutePath()));break;}case SUFFIX_TXT: {readStr.append(TxtUtil.readTxtFile(file.getAbsolutePath()));break;}default: {log.error(文件类型不正确请上传.doc、.docx、.pdf、.txt后缀文件);throw new RuntimeException(文件类型不正确请上传.doc、.docx、.pdf、.txt后缀文件);}}return readStr.toString();}第三步Word解析类 import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;import java.io.FileInputStream;
import java.io.InputStream;/*** Word 操作工具类*/
Slf4j
public class WordUtil {// 定义静态的文件后缀public static final String SUFFIX_DOC .doc;public static final String SUFFIX_DOCX .docx;/*** 读取 Word 入口方法根据后缀调用方法** param suffix 文件后缀* param filePath 文件路径* return*/public static String readWord(String suffix, String filePath) {String wordStr ;try (InputStream input new FileInputStream(filePath)) {// docx 类型if (SUFFIX_DOCX.equals(suffix)) {wordStr readDocx(input);// doc 类型} else if (SUFFIX_DOC.equals(suffix)) {wordStr readDoc(input);}} catch (Exception e) {log.error(readWord [{}] is error, filePath);}wordStr wordStr.replace(\n, );wordStr wordStr.replace(\\\\r, );wordStr wordStr.replace(\\\\t, );return wordStr;}/*** 读取 doc 类型使用 WordExtractor 对象传递输入流** param inputStream* return*/private static String readDoc(InputStream inputStream) {try {String content ;WordExtractor ex new WordExtractor(inputStream);content ex.getText();ex.close();return content;} catch (Exception e) {return null;}}/*** 读取 docx 类型使用 XWPFDocument 对象传递输入流** param inputStream* return*/private static String readDocx(InputStream inputStream) {try {String content ;XWPFDocument xdoc new XWPFDocument(inputStream);XWPFWordExtractor extractor new XWPFWordExtractor(xdoc);content extractor.getText();extractor.close();return content;} catch (Exception e) {return null;}}
}第四步PDF解析类 Slf4j
public class PDFToWordUtil {/*** Description: 提取pdf中的文字 第一种方法* Param: fileUrlList地址* Param: pages页码* return: content提取的文字*/public static String PDFToWord(String fileUrlList) throws IOException {//linux---start---fileUrlList fileUrlList.replaceAll(\\\\, File.separator);//linux--end----Integer pages PDFToPage(fileUrlList);String fileName fileUrlList;//源文件的位置PdfReader reader null;//PDF读取器reader new PdfReader(fileName);String content ;for (int i 1; i pages; i) {content PdfTextExtractor.getTextFromPage(reader, i); // 读取PDF中第i页用哪一页就写几的文档内容并转成String}content content.replace(\n, );content content.replace(\\\\r, );content content.replace(\\\\t, );log.debug(content);//控制台打印PDF第一页的内容return content;}/*** Description: 提取pdf中的页码* Param: fileUrlList地址* return: pages页码数*/public static int PDFToPage(String fileUrlList) {//linux---start---fileUrlList fileUrlList.replaceAll(\\\\, File.separator);//linux--end----File file new File(fileUrlList);PdfReader pdfReader null;try {pdfReader new PdfReader(new FileInputStream(file));} catch (IOException e) {e.printStackTrace();}int pages pdfReader.getNumberOfPages();log.debug(pdf文件的总页数为: pages);return pages;}/*** Description: 提取pdf中的文字 第二种方法* Param: pdfPath地址* return: content提取的文字*/public static String getTextFromPdf(String pdfPath) {String content null;try {// 是否排序boolean sort false;// 开始提取页数int startPage 1;// 结束提取页数int endPage Integer.MAX_VALUE;//InputStream input null;//linux---start---// pdfPath pdfPath.replaceAll(\\\\, File.separator);//linux--end----File pdfFile new File(pdfPath);PDDocument document null;try (InputStream input new FileInputStream(pdfFile)) {// 加载 pdf 文档PDFParser parser new PDFParser(input);parser.parse();document parser.getPDDocument();// 获取内容信息PDFTextStripper pts new PDFTextStripper();pts.setSortByPosition(sort);endPage document.getNumberOfPages();log.debug(Total Page: endPage);pts.setStartPage(startPage);pts.setEndPage(endPage);try {content pts.getText(document);} catch (Exception e) {throw e;}log.debug(Get PDF Content ...);} catch (Exception e) {throw e;} finally {if (null ! document)document.close();}content content.replace(\n, );content content.replace(\\\\r, );content content.replace(\\\\t, );} catch (Exception e) {log.error(getTextFromPdf [{}] is error, pdfPath);}return content;}}
第五步Txt解析类 Slf4j
public class TxtUtil {/*** .* 获取文本内容** return 文件内容*/public static String readTxtFile(String filePath) {String txtStr ;try {File file new File(filePath);if (!file.exists()) {log.error(可读文件不存在[{}], file.getAbsolutePath());}txtStr FileUtils.readFileToString(file, CharsetUtil.UTF_8);} catch (IOException e) {log.error(readTxtFile [{}] is error, filePath);}txtStr txtStr.replace(\n, );txtStr txtStr.replace(\\\\r, );txtStr txtStr.replace(\\\\t, );return txtStr;}/*** .* 写入数据** param outPath 输出路径* param context 内容*/public static void writeFile(String outPath, String context) {try {File file new File(outPath);FileUtils.write(file, context, CharsetUtil.UTF_8, false);} catch (IOException e) {log.error(writeFile is error {}, e);}}
}总结
我是南国以南i记录点滴每天成长一点点学习是永无止境的转载请附原文链接
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/89131.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!