在 Ja va 数据处理、文本清洗以及内容解析这些常见的开发场景里,从 HTML 文件中剥离掉标签、样式和脚本这些冗余的格式信息,只提取出核心的纯文本,可以说是一项相当高频的需求。市面上能用的技术方案不少,不过今天要聊的这个,主打一个轻量和简洁——用 Free Spire.Doc for Ja va 库来完成 HTML 纯文本提取,直接给出一套可复用的代码,省心省力。

## 一、实现原理
Free Spire.Doc for Ja va 本身是一款免费库,它的核心设计初衷是针对 Word 文档的段落、节、表格这些元素来工作的。当你调用它的 `loadFromFile` 方法并指定 `FileFormat.Html` 时,库内部就会把 HTML 的标签、样式和文本一一映射到它自己的文档对象模型中去。之后只要再调用 `getText()` 方法,库就会遍历整棵文档树,把里面所有文本节点的内容拼接起来并返回,同时把所有 HTML 标签和大部分脚本、样式内容过滤掉。说白了,这是一种“先把 HTML 解析成富文本,再从中提取纯文本”的桥接思路,虽然绕了点路,但胜在稳妥有效。
## 二、环境准备
**添加依赖**:在项目的 `pom.xml` 中添加仓库地址与依赖坐标:
```xml
com.e-iceblue
e-iceblue
https://repo.e-iceblue.com/nexus/content/groups/public/
e-iceblue
spire.doc.free
14.3.1
```
如果用的是 Gradle,可以这样写:
```ja va
implementation 'e-iceblue:spire.doc.free:14.3.1@jar'
```
当然,手动下载 JAR 包然后添加到 classpath 也是没问题的。
**准备 HTML 文件**:比如你手头有一个 `Sample.html`,里面随便放点什么内容都行。
## 三、代码实现
直接上一个完整的示例,演示怎么读取 HTML 文件、提取文本并保存为 TXT 文件。
```ja va
import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import ja va.io.FileWriter;
import ja va.io.IOException;
public class ExtractTextFromHTML {
public static void main(String[] args) {
// 1. 创建 Document 对象
Document doc = new Document();
// 2. 加载 HTML 文件(指定格式为 Html)
doc.loadFromFile("Sample.html", FileFormat.Html);
// 3. 获取提取的纯文本
String text = doc.getText();
// 4. 将文本写入输出文件
try (FileWriter fileWriter = new FileWriter("HTMLText.txt")) {
fileWriter.write(text);
System.out.println("文本提取完成,已保存至 HTMLText.txt");
} catch (IOException e) {
System.err.println("写入文件失败:" + e.getMessage());
}
}
}
```
**这段代码其实并不复杂,核心逻辑无非四步**:先实例化 `Document` 类,这是 Free Spire.Doc 的入口;然后调用 `loadFromFile`,两个参数分别是文件路径和文件格式,关键的 `FileFormat.Html` 让库知道要用 HTML 的方式去解析;接着用 `getText()` 方法拿到字符串,这里面换行符和空格会根据内部规则保留,但所有 HTML 标签都会被剥离干净;最后用 try-with-resources 语句安全地把文本写进 TXT 文件。
## 四、注意事项与局限性
### 1. 文本布局简化
`getText()` 返回的文本,不会保留原始 HTML 里的表格结构、缩进或者列表符号。如果提取任务对格式有要求,比如想把表格转成 CSV,那这个方法就不太灵了。
### 2. 对 Ja vaScript 和 CSS 的处理
库在加载 HTML 的时候会直接忽略掉 `", "")
.replaceAll("(?i)", "");
// 移除所有 HTML 标签
String noTags = noScript.replaceAll("<[^>]+>", "");
// 解码 HTML 实体(如 -> 空格)
String unescaped = org.apache.commons.text.StringEscapeUtils.unescapeHtml4(noTags);
// 合并空白
return unescaped.replaceAll("\\s+", " ").trim();
}
```
需要额外添加 Apache Commons Text 依赖:
```xml
org.apache.commons
commons-text
1.12.0
```
它的缺陷也很明显:无法正确处理嵌套标签、CDATA、注释这类复杂结构,还可能误删标签内部的合法文本。
### 3. 其他备选方案
**HTML Cleaner**
```ja va
import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.CleanerProperties;
HtmlCleaner cleaner = new HtmlCleaner();
CleanerProperties props = cleaner.getProperties();
// 配置...
TagNode node = cleaner.clean(new File("example.html"));
String text = node.getText().toString();
```
**Apache Tika**
这个方案适合需要从多种文档格式(HTML、PDF、Word 等)中统一提取文本的场景。
```xml
org.apache.tika
tika-core
2.9.0
```
```ja va
import org.apache.tika.Tika;
import ja va.io.File;
Tika tika = new Tika();
String text = tika.parseToString(new File("example.html"));
```
## 六、总结
说到底,本文提供的这套用 Free Spire.Doc 提取 HTML 纯文本的方案,核心代码就那么几行,完全不需要手动去写 HTML 标签的解析逻辑,开发成本被大幅降低。它的核心优势也很明确:开箱即用,没有复杂的配置;自动过滤 HTML 里的冗余格式,纯文本提取得相当精准;免费版没有授权成本,很适合轻量级的业务场景。开发者完全可以拿来就用,再根据自己的需求封装成工具类,去应对批量 HTML 文件处理这类更扩展的场景。
本文转载于:https://www.jb51.net/program/362703ybm.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。