Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果出力为HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件的差异数据都出力到HTML中,并且将有差异的字段高亮显示出来
时间: 2024-03-01 12:54:00 浏览: 144
groovy-loader:在文件目录中动态加载Groovy脚本
可以使用以下Groovy脚本来利用java-diff-utils实现两个文件夹的比较,并将比较结果输出为HTML文件,并高亮显示差异字段:
```groovy
@Grab(group='com.googlecode.java-diff-utils', module='diffutils', version='1.3.0')
import difflib.*
import java.nio.file.*
import java.nio.charset.*
// 设置文件夹路径
def folder1 = Paths.get("path/to/folder1")
def folder2 = Paths.get("path/to/folder2")
// 定义输出HTML文件路径
def outputHtml = Paths.get("output.html")
// 获取文件夹中所有文件的路径
def files1 = Files.walk(folder1).filter{Files.isRegularFile(it)}.collect()
def files2 = Files.walk(folder2).filter{Files.isRegularFile(it)}.collect()
// 遍历所有文件并比较
def diffs = []
for (file1 in files1) {
def file2 = files2.find{it.fileName.equals(file1.fileName)}
if (file2) {
// 当文件在两个文件夹中都存在时,比较文件内容
def lines1 = Files.readAllLines(file1, StandardCharsets.UTF_8)
def lines2 = Files.readAllLines(file2, StandardCharsets.UTF_8)
def patch = DiffUtils.diff(lines1, lines2)
diffs.add([file1, file2, patch])
files2.remove(file2)
} else {
// 当文件仅在folder1中存在时,将其视为删除文件
diffs.add([file1, null, null])
}
}
// 将folder2中剩余的文件视为新增文件
for (file2 in files2) {
diffs.add([null, file2, null])
}
// 输出HTML文件
def writer = Files.newBufferedWriter(outputHtml, StandardCharsets.UTF_8)
writer.write("<html><body>")
for (diff in diffs) {
def file1 = diff[0]
def file2 = diff[1]
def patch = diff[2]
writer.write("<h2>${file1?.fileName} vs ${file2?.fileName}</h2>")
if (file1 && file2 && patch) {
// 输出差异数据
def diffHtml = DiffUtils.htmlDiff(lines(file1), lines(file2), patch)
writer.write(diffHtml)
} else if (file1) {
// 输出删除文件
writer.write("<p style='color:red'>${file1} has been deleted</p>")
} else {
// 输出新增文件
writer.write("<p style='color:green'>${file2} has been added</p>")
}
}
writer.write("</body></html>")
writer.close()
// 读取文件内容并按行返回
def lines(file) {
Files.readAllLines(file, StandardCharsets.UTF_8)
}
```
在脚本中,首先设置了两个文件夹的路径和输出HTML文件的路径,然后使用`Files.walk()`方法获取文件夹中所有文件的路径。接着,遍历所有文件并比较它们的内容,将差异数据存储在一个列表中。最后,输出HTML文件,并使用`DiffUtils.htmlDiff()`方法将差异数据转换为HTML格式,高亮显示差异字段。需要注意的是,`DiffUtils.htmlDiff()`方法返回的HTML字符串中,差异字段默认为红色,可以根据需要进行更改。
阅读全文