Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果出力为HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件的差异数据都出力到HTML中,并且将有差异的字段高亮显示出来
时间: 2024-03-03 21:53:32 浏览: 43
比较两个文件的差别的工具
以下是一个使用 java-diff-utils 库实现两个文件夹对比并输出比较结果为 HTML 文件的 Groovy 脚本。请确保已将 java-diff-utils 库添加到项目中。
```groovy
import difflib.*
import java.nio.charset.StandardCharsets
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
// 定义比较结果的 HTML 样式
def htmlStyle = """
<style>
.diffAdded {
background-color: #aaffaa;
}
.diffRemoved {
background-color: #ffaaaa;
}
.diffChanged {
background-color: #ffffaa;
}
</style>
"""
// 定义输出文件的路径和名称
def outputFilePath = "比较结果.html"
// 定义要比较的文件夹路径
def folder1Path = "文件夹1"
def folder2Path = "文件夹2"
// 获取两个文件夹中所有文件的路径
def folder1Files = Files.walk(Paths.get(folder1Path)).filter{ Files.isRegularFile(it) }.collect()
def folder2Files = Files.walk(Paths.get(folder2Path)).filter{ Files.isRegularFile(it) }.collect()
// 遍历两个文件夹中的所有文件,进行比较
def diffHtml = new StringBuffer()
diffHtml.append(htmlStyle)
folder1Files.each { file1Path ->
def relativePath = file1Path.toString().substring(folder1Path.length() + 1)
def file2Path = Paths.get(folder2Path, relativePath)
if (Files.exists(file2Path)) {
def file1Lines = Files.readAllLines(file1Path, StandardCharsets.UTF_8)
def file2Lines = Files.readAllLines(file2Path, StandardCharsets.UTF_8)
def patch = DiffUtils.diff(file1Lines, file2Lines)
if (!patch.getDeltas().isEmpty()) {
diffHtml.append("<h4>${relativePath}</h4>")
diffHtml.append("<table>")
patch.getDeltas().each { delta ->
def start = delta.getOriginal().getPosition()
def size = delta.getOriginal().size()
def end = start + size - 1
def type = delta.getType().toString()
def diffLines = delta.getRevised().getLines()
diffHtml.append("<tr>")
diffHtml.append("<td>${type}</td>")
diffHtml.append("<td>(${start + 1}, ${end + 1})</td>")
diffHtml.append("</tr>")
diffHtml.append("<tr>")
diffHtml.append("<td colspan='2'><pre>")
def i = start
diffLines.each { line ->
if (delta.getType() == Delta.TYPE.CHANGE) {
if (line.startsWith("-")) {
diffHtml.append("<span class='diffRemoved'>")
diffHtml.append(line)
diffHtml.append("</span>")
i++
} else if (line.startsWith("+")) {
diffHtml.append("<span class='diffAdded'>")
diffHtml.append(line)
diffHtml.append("</span>")
} else {
def file1Line = file1Lines[i++]
if (line != file1Line) {
diffHtml.append("<span class='diffChanged'>")
diffHtml.append(line)
diffHtml.append("</span>")
} else {
diffHtml.append(line)
}
}
} else if (delta.getType() == Delta.TYPE.DELETE) {
diffHtml.append("<span class='diffRemoved'>")
diffHtml.append(line)
diffHtml.append("</span>")
i++
} else {
diffHtml.append("<span class='diffAdded'>")
diffHtml.append(line)
diffHtml.append("</span>")
}
}
diffHtml.append("</pre></td>")
diffHtml.append("</tr>")
}
diffHtml.append("</table>")
}
}
}
// 将比较结果输出到 HTML 文件
Files.write(Paths.get(outputFilePath), diffHtml.toString().getBytes(StandardCharsets.UTF_8))
```
以上脚本将遍历两个文件夹中的所有文件,对比相同路径下的文件,并将比较结果输出到一个 HTML 文件中。在输出的 HTML 文件中,将新增的行标记为绿色,删除的行标记为红色,修改的行标记为黄色,并将修改的字段高亮显示出来。
阅读全文