Katalon利用java-diff-utils库写一个Groovy脚本,实现自动化比较两个文件夹下的文件,并将比较结果以文件为单位输出成HTML,要求忽略隔行数据。当文件在两个文件夹中都存在但内容不同时,将两个文件中的差异数据都出力到HTML中,并将有差异的字段高亮显示出来;当文件只在一个文件夹中存在时,将这个信息输出到HTML中
时间: 2024-03-04 21:49:04 浏览: 11
好的,以下是更新后的Katalon Studio Groovy脚本,用于比较两个文件夹中的文件,并将比较结果输出为HTML。该脚本使用了java-diff-utils库比较两个文件的内容,并将比较结果以HTML的形式输出。请注意,该脚本忽略了隔行数据,并将有差异的字段高亮显示出来,同时也会输出在一个文件夹中存在但在另一个文件夹中不存在的文件信息。
```groovy
import difflib.*
import java.nio.file.*
import java.nio.charset.StandardCharsets
// 两个文件夹的路径
def folder1 = "path/to/folder1"
def folder2 = "path/to/folder2"
// 创建一个HTML文件,用于存储比较结果
def htmlFilePath = "path/to/comparison.html"
def htmlFile = new File(htmlFilePath)
htmlFile.createNewFile()
// 创建一个HTML StringBuilder
def htmlBuilder = new StringBuilder()
// 遍历文件夹1中的所有文件
Files.walk(Paths.get(folder1)).filter { Files.isRegularFile(it) }.forEach { file1Path ->
// 获取文件在文件夹2中的路径
def file2Path = Paths.get(folder2, file1Path.toFile().getName())
// 如果文件在文件夹2中不存在,则输出文件不存在的信息
if (!Files.exists(file2Path)) {
htmlBuilder.append("File ${file1Path.toFile().getName()} only exists in folder 1<br>")
}
else {
// 读取文件1的内容,并去除空行
def file1Content = Files.readAllLines(file1Path, StandardCharsets.UTF_8).findAll { !it.trim().isEmpty() }
// 读取文件2的内容,并去除空行
def file2Content = Files.readAllLines(file2Path, StandardCharsets.UTF_8).findAll { !it.trim().isEmpty() }
// 使用java-diff-utils库比较两个文件的内容
def patch = DiffUtils.diff(file1Content, file2Content)
// 如果文件内容相同,则输出文件相同的信息
if (patch.getDeltas().isEmpty()) {
htmlBuilder.append("File ${file1Path.toFile().getName()} is the same in both folders<br>")
}
else {
// 输出文件不同的信息
htmlBuilder.append("File ${file1Path.toFile().getName()} is different in both folders<br>")
// 遍历文件差异数据
patch.getDeltas().forEach { delta ->
// 获取差异的起始行和结束行
def chunk = delta.getRevised()
def start = chunk.getPosition()
def end = start + chunk.size() - 1
// 遍历差异的行
chunk.getLines().forEachWithIndex { line, index ->
// 如果行中有差异,则将差异的部分高亮显示
if (delta.getType() == Delta.TYPE.CHANGE && line.startsWith("-")) {
htmlBuilder.append("<span style=\"background-color: #FFB6C1;\">${line}</span><br>")
}
else if (delta.getType() == Delta.TYPE.CHANGE && line.startsWith("+")) {
htmlBuilder.append("<span style=\"background-color: #98FB98;\">${line}</span><br>")
}
else {
htmlBuilder.append(line + "<br>")
}
}
// 输出差异的起始行和结束行
htmlBuilder.append("Different lines: ${start + 1} to ${end + 1}<br>")
}
}
}
}
// 遍历文件夹2中的所有文件,查找只存在于文件夹2中的文件
Files.walk(Paths.get(folder2)).filter { Files.isRegularFile(it) }.forEach { file2Path ->
def file1Path = Paths.get(folder1, file2Path.toFile().getName())
// 如果文件在文件夹1中不存在,则输出文件不存在的信息
if (!Files.exists(file1Path)) {
htmlBuilder.append("File ${file2Path.toFile().getName()} only exists in folder 2<br>")
}
}
// 将HTML写入文件
htmlFile.write(htmlBuilder.toString())
// 输出比较结果的路径
println "Comparison result is saved at ${htmlFilePath}"
```
请将“path/to/folder1”和“path/to/folder2”替换为您要比较的两个文件夹的路径,并将“path/to/comparison.html”替换为您想要输出比较结果的HTML文件的路径。