Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果以文件为单位出力成各自的HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件有差异的数据都出力到HTML中,将两个文件的差异数据以逗号隔开,并将有差异的字段高亮显示出来;当文件只在一个文件夹中存在的文件,将这个信息出力到HTML中
时间: 2024-03-03 21:53:44 浏览: 88
比较两个文件的差别的工具
很抱歉,我之前回复的内容有误。以下是一个可以实现你要求的 Groovy 脚本,使用了 java-diff-utils 库进行文件夹对比,并将比较结果以文件为单位输出为 HTML 文件。
```groovy
@Grab('com.googlecode.java-diff-utils:diffutils:1.3.0')
import difflib.*
import java.nio.file.*
import java.util.stream.Collectors
// 定义文件夹路径
def folder1 = Paths.get("folder1")
def folder2 = Paths.get("folder2")
def outputFolder = Paths.get("output")
// 遍历文件夹1中的文件
Files.walk(folder1)
.filter { Files.isRegularFile(it) }
.forEach { file1 ->
// 检查文件是否存在于文件夹2中
def file2 = folder2.resolve(folder1.relativize(file1))
if (!Files.exists(file2)) {
// 文件只在一个文件夹中存在
def outputFile = outputFolder.resolve(file1.fileName.toString() + ".html")
Files.writeString(outputFile, "File only exists in folder 1: $file1")
} else {
// 文件在两个文件夹中都存在,进行比较
def diff = DiffUtils.diff(
Files.readAllLines(file1),
Files.readAllLines(file2)
)
// 生成 HTML 文件
def outputFile = outputFolder.resolve(file1.fileName.toString() + ".html")
def htmlLines = diff.getDeltas().stream().map { delta ->
def lines = delta.getRevised().getLines().stream().collect(Collectors.joining("</span>, <span class='highlight'>"))
"<div><span class='line-number'>" +
"${delta.getRevised().getPosition() + 1}</span>: " +
"<span>${lines}</span></div>"
}.collect(Collectors.toList())
Files.writeString(outputFile, """
<html>
<head>
<style>
.line-number {
display: inline-block;
width: 30px;
text-align: right;
margin-right: 10px;
color: gray;
font-size: 0.8em;
font-family: monospace;
}
.highlight {
background-color: #f0ad4e;
}
</style>
</head>
<body>
<h1>File comparison: ${file1.fileName} vs ${file2.fileName}</h1>
${htmlLines.join("\n")}
</body>
</html>
""")
}
}
```
脚本的大致流程如下:
1. 定义要对比的两个文件夹路径和输出文件夹路径。
2. 遍历文件夹1中的所有文件,对每个文件进行处理。
3. 检查文件是否存在于文件夹2中,如果不存在,则输出文件只存在于文件夹1中的信息。
4. 如果文件存在于文件夹2中,则使用 java-diff-utils 库进行比较。
5. 将比较结果输出为 HTML 文件。
脚本中使用了 java-diff-utils 库的 DiffUtils.diff() 方法进行比较,返回的结果是一个 Delta 列表,表示两个文本文件的差异。对于每个 Delta,我们将其转换为 HTML 格式,使用 CSS 样式将有差异的字段高亮显示,最后将所有 Delta 的 HTML 片段拼接起来,写入输出 HTML 文件中。
注意,这个脚本只是一个简单的示例,并不考虑性能和错误处理等方面。你可以根据自己的需求进行修改和优化。
阅读全文