Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果出力为HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件的差异数据都出力到HTML中,并且将有差异的字段高亮显示出来
时间: 2024-03-03 22:53:41 浏览: 69
以下是使用Katalon和Groovy脚本实现两个文件夹对比并生成HTML文件的示例代码:
```groovy
import java.io.File
import difflib.Delta
import difflib.DiffUtils
import difflib.Patch
//设置要对比的文件夹路径
def folder1Path = "path/to/folder1"
def folder2Path = "path/to/folder2"
//设置生成的HTML文件路径
def htmlFilePath = "path/to/result.html"
//获取文件夹中的所有文件
def folder1Files = new File(folder1Path).listFiles()
def folder2Files = new File(folder2Path).listFiles()
//遍历两个文件夹中的所有文件
def diffs = []
for (def file1 : folder1Files) {
def file2 = new File(folder2Path, file1.name)
if (file2.exists()) {
//如果文件在两个文件夹中都存在,则进行比较
def diff = diffFiles(file1, file2)
diffs.addAll(diff.getDeltas())
} else {
//如果文件只在一个文件夹中存在,则将其视为删除或新增文件
diffs.add(new Delta(Delta.TYPE.CHANGE, getLines(file1), []))
}
}
for (def file2 : folder2Files) {
def file1 = new File(folder1Path, file2.name)
if (!file1.exists()) {
//如果文件只在一个文件夹中存在,则将其视为删除或新增文件
diffs.add(new Delta(Delta.TYPE.CHANGE, [], getLines(file2)))
}
}
//生成HTML文件
def htmlBuilder = new StringBuilder()
htmlBuilder.append("<html><head><style>.change {background-color: yellow;}</style></head><body>")
for (def delta : diffs) {
def lines = delta.getOriginal().size() > 0 ? delta.getOriginal() : delta.getRevised()
htmlBuilder.append("<p>")
for (def line : lines) {
if (delta.getType() == Delta.TYPE.DELETE) {
//如果是删除操作,将该行标记为红色
htmlBuilder.append("<span class=\"change\" style=\"background-color: red;\">").append(line).append("</span>")
} else if (delta.getType() == Delta.TYPE.INSERT) {
//如果是新增操作,将该行标记为绿色
htmlBuilder.append("<span class=\"change\" style=\"background-color: green;\">").append(line).append("</span>")
} else {
//如果是修改操作,将该行标记为黄色
if (delta.getOriginal().contains(line)) {
//如果该行在原文件中存在,则将其标记为黄色
htmlBuilder.append("<span class=\"change\" style=\"background-color: yellow;\">").append(line).append("</span>")
} else {
//如果该行在修改后的文件中存在,则将其标记为绿色
htmlBuilder.append("<span class=\"change\" style=\"background-color: green;\">").append(line).append("</span>")
}
}
htmlBuilder.append("<br>")
}
htmlBuilder.append("</p>")
}
htmlBuilder.append("</body></html>")
new File(htmlFilePath).write(htmlBuilder.toString())
//获取文件中的所有行
def getLines(file) {
return file.readLines().collect { it.trim() }
}
//比较两个文件的内容
def diffFiles(file1, file2) {
def patch = DiffUtils.diff(getLines(file1), getLines(file2))
return patch
}
```
这段代码使用了`java-diff-util`库来比较两个文件的差异,并将比较结果以HTML格式输出。在生成HTML文件时,将有差异的部分标记为高亮显示。同时,如果两个文件中存在隔行数据,则也会被正确处理。
阅读全文