Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果出力为HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件的差异数据都出力到HTML中,并且将有差异的字段高亮显示出来
时间: 2024-03-03 07:53:49 浏览: 19
以下是一个使用Java-Diff-Utils进行两个文件夹对比并生成HTML报告的Groovy脚本。请确保在运行此脚本之前安装了Java-Diff-Utils。
```groovy
@Grab(group='com.googlecode.java-diff-utils', module='diffutils', version='4.3')
import difflib.*
import java.nio.file.*
// 定义两个文件夹的路径
def folder1 = Paths.get("path/to/folder1")
def folder2 = Paths.get("path/to/folder2")
// 定义HTML报告名称
def reportName = "diff_report.html"
// 定义HTML报告模板
def reportTemplate = """
<!DOCTYPE html>
<html>
<head>
<title>Folder Comparison Report</title>
<style>
.added {{
background-color: #aaffaa;
}}
.removed {{
background-color: #ffaaaa;
}}
.changed {{
background-color: #ffffaa;
}}
</style>
</head>
<body>
<h1>Folder Comparison Report</h1>
<h2>Folder 1: ${folder1}</h2>
<h2>Folder 2: ${folder2}</h2>
<table>
<thead>
<tr>
<th>File Name</th>
<th>Status</th>
</tr>
</thead>
<tbody>
${tableRows}
</tbody>
</table>
</body>
</html>
"""
// 遍历文件夹1中的所有文件
def tableRows = ""
Files.walk(folder1).forEach { path1 ->
// 获取文件名
def fileName = folder1.relativize(path1).toString()
// 拼接文件夹2中的路径
def path2 = folder2.resolve(fileName)
// 如果文件在文件夹1和文件夹2中都存在
if (Files.exists(path2)) {
// 读取文件内容
def file1Content = Files.readAllLines(path1)
def file2Content = Files.readAllLines(path2)
// 使用Java-Diff-Utils比较文件内容
def patch = DiffUtils.diff(file1Content, file2Content)
// 如果文件内容不同
if (!patch.getDeltas().isEmpty()) {
// 生成差异报告
def diff = patch.getDeltas().collect { delta ->
def diffLines = delta.getOriginal().getLines().collect { "- " + it }
diffLines += delta.getRevised().getLines().collect { "+ " + it }
diffLines.join("\n")
}.join("\n\n")
// 将差异报告写入HTML表格中
tableRows += """
<tr>
<td>${fileName}</td>
<td class="changed"><pre>${diff}</pre></td>
</tr>
"""
}
// 如果文件只存在于文件夹1中
} else {
// 将文件标记为已删除
tableRows += """
<tr>
<td>${fileName}</td>
<td class="removed">Removed</td>
</tr>
"""
}
}
// 遍历文件夹2中的所有文件,找出只存在于文件夹2中的文件,并将其标记为新增
Files.walk(folder2).forEach { path2 ->
def fileName = folder2.relativize(path2).toString()
def path1 = folder1.resolve(fileName)
if (!Files.exists(path1)) {
tableRows += """
<tr>
<td>${fileName}</td>
<td class="added">Added</td>
</tr>
"""
}
}
// 将HTML报告模板中的占位符替换为实际内容,并将报告写入磁盘
def report = reportTemplate.replaceAll("\\$\\{folder1\\}", folder1.toString())
.replaceAll("\\$\\{folder2\\}", folder2.toString())
.replaceAll("\\$\\{tableRows\\}", tableRows)
Files.write(Paths.get(reportName), report.getBytes())
```
此脚本将生成一个HTML报告,其中包含两个文件夹中所有文件的比较结果。如果文件存在于两个文件夹中并且内容不同,则会显示差异报告,其中有差异的字段会高亮显示。如果文件只存在于其中一个文件夹中,则会将其标记为已删除或已添加。