Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果出力为HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件的差异数据都出力到HTML中,并且将有差异的字段高亮显示出来
时间: 2024-03-03 13:53:32 浏览: 12
以下是一个使用 java-diff-utils 实现两个文件夹对比并将比较结果输出为 HTML 的 Katalon Groovy 脚本:
```
import difflib.*
import java.nio.file.*
import java.io.*
// 定义比较文件夹的路径
def folder1Path = "path/to/folder1"
def folder2Path = "path/to/folder2"
// 定义输出的 HTML 文件路径
def outputPath = "path/to/output.html"
// 获取文件夹中的所有文件
def folder1Files = new File(folder1Path).listFiles().toList()
def folder2Files = new File(folder2Path).listFiles().toList()
// 创建 HTML 输出流
def output = new PrintWriter(new File(outputPath))
// 输出 HTML 头部
output.println("<html>")
output.println("<head>")
output.println("<style>")
output.println(".added { background-color: #aaffaa; }")
output.println(".deleted { background-color: #ffaaaa; }")
output.println("</style>")
output.println("</head>")
output.println("<body>")
// 遍历文件夹中的所有文件
(folder1Files + folder2Files).unique().each { file ->
// 获取文件内容
def lines1 = Files.readAllLines(file.toPath())
def lines2 = Files.readAllLines(new File(folder2Path, file.getName()).toPath())
// 使用 java-diff-utils 比较文件内容
def patch = DiffUtils.diff(lines1, lines2)
// 如果文件内容有差异,则输出差异内容到 HTML 中
if (patch.getDeltas().size() > 0) {
output.println("<h2>${file.getName()}</h2>")
output.println("<table>")
output.println("<tr><th>Line</th><th>Text</th></tr>")
patch.getDeltas().each { delta ->
def (start, end) = (delta.getOriginal().getPosition() + 1) + "-" + (delta.getOriginal().last() + 1)
output.println("<tr><td colspan=\"2\"><strong>${delta.getType().name().toLowerCase()}</strong>: ${start} to ${end}</td></tr>")
delta.getOriginal().getLines().eachWithIndex { line, index ->
if (delta.getType() == Delta.TYPE.DELETE || delta.getType() == Delta.TYPE.CHANGE) {
output.println("<tr class=\"deleted\"><td>${index + delta.getOriginal().getPosition() + 1}</td><td>${line}</td></tr>")
}
}
delta.getRevised().getLines().eachWithIndex { line, index ->
if (delta.getType() == Delta.TYPE.INSERT || delta.getType() == Delta.TYPE.CHANGE) {
output.println("<tr class=\"added\"><td>${index + delta.getRevised().getPosition() + 1}</td><td>${line}</td></tr>")
}
}
}
output.println("</table>")
}
}
// 输出 HTML 尾部
output.println("</body>")
output.println("</html>")
// 关闭输出流
output.close()
```
该脚本会比较两个文件夹中的所有文件,并将比较结果输出到指定的 HTML 文件中。对于每个有差异的文件,会将差异内容高亮显示并标记为“添加”或“删除”。
阅读全文