当前位置:   article > 正文

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

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

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

这里需要安装Maven:

版本最好统一

  1. <dependency>
  2. <groupId>org.apache.poi</groupId>
  3. <artifactId>poi-ooxml</artifactId>
  4. <version>5.2.3</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.poi</groupId>
  8. <artifactId>poi</artifactId>
  9. <version>5.2.3</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.apache.poi</groupId>
  13. <artifactId>poi-scratchpad</artifactId>
  14. <version>5.2.3</version>
  15. </dependency>
  1. /**
  2. * 根据文本不同的编码格式拿到文本内容
  3. * @param file
  4. * @return
  5. * @throws IOException
  6. */
  7. private String getContent(MultipartFile file) throws IOException {
  8. String fileName = file.getOriginalFilename();
  9. if (fileName != null) {
  10. if (fileName.endsWith(".txt")) {
  11. return readTextFile(file.getBytes());
  12. } else if (fileName.endsWith(".doc")) {
  13. return readDocFile(file);
  14. } else if (fileName.endsWith(".docx")) {
  15. return readDocxFile(file);
  16. }
  17. }
  18. return "";
  19. }
  20. /**
  21. * 文本编码格式
  22. */
  23. private static final List<Charset> FALLBACK_ENCODINGS = Arrays.asList(
  24. StandardCharsets.UTF_8,
  25. Charset.forName("GBK"),
  26. Charset.forName("GB2312"),
  27. StandardCharsets.ISO_8859_1
  28. );
  29. /**
  30. * 读取txt格式的文件
  31. * @param fileBytes
  32. * @return
  33. */
  34. private String readTextFile(byte[] fileBytes) {
  35. // 使用 UniversalDetector 检测文件编码
  36. UniversalDetector detector = new UniversalDetector(null);
  37. detector.handleData(fileBytes, 0, fileBytes.length);
  38. detector.dataEnd();
  39. String encoding = detector.getDetectedCharset();
  40. if (encoding != null) {
  41. String content = new String(fileBytes, Charset.forName(encoding));
  42. if (isValidContent(content)) {
  43. return content;
  44. }
  45. }
  46. // 尝试使用多种常见编码解析文件内容
  47. for (Charset charset : FALLBACK_ENCODINGS) {
  48. String content = new String(fileBytes, charset);
  49. if (isValidContent(content)) {
  50. return content;
  51. }
  52. }
  53. // 如果所有尝试都失败,返回默认的 UTF-8 编码内容
  54. return new String(fileBytes, StandardCharsets.UTF_8);
  55. }
  56. /**
  57. * 读取doc格式的文件
  58. * @param file
  59. * @return
  60. * @throws IOException
  61. */
  62. private static String readDocFile(MultipartFile file) throws IOException {
  63. try (InputStream inputStream = file.getInputStream();
  64. HWPFDocument doc = new HWPFDocument(inputStream)) {
  65. WordExtractor extractor = new WordExtractor(doc);
  66. return extractor.getText();
  67. }
  68. }
  69. /**
  70. * 读取docx格式的文件
  71. * @param file
  72. * @return
  73. * @throws IOException
  74. */
  75. private String readDocxFile(MultipartFile file) throws IOException {
  76. InputStream inputStream = file.getInputStream();
  77. XWPFDocument docx = new XWPFDocument(inputStream);
  78. XWPFWordExtractor extractor = new XWPFWordExtractor(docx);
  79. String content = extractor.getText();
  80. docx.close();
  81. inputStream.close();
  82. return content;
  83. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/778937
推荐阅读
相关标签
  

闽ICP备14008679号