Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果出力为HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件的差异数据都出力到HTML中,并且将有差异的字段高亮显示出来
时间: 2024-03-03 11:54:02 浏览: 122
以下是使用Katalon和java-diff-utils实现两个文件夹对比,并将比较结果输出为HTML文件的Groovy脚本:
```groovy
import difflib.DiffUtils
import difflib.Patch
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
// 文件夹路径
def folder1Path = Paths.get("path/to/folder1")
def folder2Path = Paths.get("path/to/folder2")
// 文件夹中的文件列表
def folder1Files = Files.list(folder1Path).toArray()
def folder2Files = Files.list(folder2Path).toArray()
// 对比结果
def diffHtml = new StringBuilder()
// 遍历文件夹1中的文件
for (Path folder1File : folder1Files) {
// 如果文件夹2中也有相同的文件
def folder2File = folder2Path.resolve(folder1File.getFileName())
if (Files.exists(folder2File)) {
// 对比文件内容
def folder1Lines = Files.readAllLines(folder1File)
def folder2Lines = Files.readAllLines(folder2File)
def patch = DiffUtils.diff(folder1Lines, folder2Lines)
// 如果有差异
if (!patch.getDeltas().isEmpty()) {
// 输出文件名
diffHtml.append("<h2>${folder1File.getFileName()}</h2>")
// 输出差异内容
for (delta in patch.getDeltas()) {
diffHtml.append("<p>")
if (delta.getType() == Patch.DeltaType.DELETE) {
diffHtml.append("<span style='background-color: #ffcccc;'>")
} else {
diffHtml.append("<span style='background-color: #ccffcc;'>")
}
// 输出差异行
for (Object line : delta.getSource().getLines()) {
if (delta.getType() == Patch.DeltaType.DELETE || delta.getType() == Patch.DeltaType.CHANGE) {
diffHtml.append("<del>${line}</del><br/>")
} else {
diffHtml.append("<span>${line}</span><br/>")
}
}
diffHtml.append("</span>")
diffHtml.append("</p>")
}
}
} else {
// 输出文件夹1中的文件
diffHtml.append("<h2>${folder1File.getFileName()} (only in folder 1)</h2>")
diffHtml.append("<p>")
for (String line : Files.readAllLines(folder1File)) {
diffHtml.append("<span>${line}</span><br/>")
}
diffHtml.append("</p>")
}
}
// 输出文件夹2中的文件
for (Path folder2File : folder2Files) {
def folder1File = folder1Path.resolve(folder2File.getFileName())
if (!Files.exists(folder1File)) {
diffHtml.append("<h2>${folder2File.getFileName()} (only in folder 2)</h2>")
diffHtml.append("<p>")
for (String line : Files.readAllLines(folder2File)) {
diffHtml.append("<span>${line}</span><br/>")
}
diffHtml.append("</p>")
}
}
// 将结果输出为HTML文件
Files.write(Paths.get("path/to/diff.html"), diffHtml.toString().getBytes())
```
这个脚本会遍历两个文件夹中的文件,对比它们的内容,并将差异输出为HTML文件。如果两个文件夹中有相同的文件,那么它们的内容会被逐行对比,差异行会被高亮显示。如果一个文件只在一个文件夹中存在,那么它的内容会被单独输出。
阅读全文