Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果出力为HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件的差异数据都出力到HTML中,并且将有差异的字段高亮显示出来;当文件只在一个文件夹中存在的文件,将结果出力到HTML中
时间: 2024-03-01 16:52:13 浏览: 121
folder-diff:比较两个文件夹的工具
好的,以下是Katalon的Groovy脚本,实现两个文件夹对比并将比较结果输出为HTML文件:
```groovy
import java.io.File
import java.io.IOException
import java.nio.charset.StandardCharsets
import org.apache.commons.io.FileUtils
import difflib.DiffUtils
import difflib.Patch
// 定义要比较的文件夹路径
def folder1Path = "path/to/folder1"
def folder2Path = "path/to/folder2"
// 定义生成的HTML文件路径
def htmlFilePath = "path/to/result.html"
try {
// 获取两个文件夹中的所有文件
def folder1 = new File(folder1Path)
def folder2 = new File(folder2Path)
def allFiles = new HashSet<File>()
allFiles.addAll(FileUtils.listFiles(folder1, null, true))
allFiles.addAll(FileUtils.listFiles(folder2, null, true))
// 定义HTML文件内容
def htmlContent = "<html><head><title>Folder Diff Report</title></head><body><h1>Folder Diff Report</h1>"
// 遍历所有文件进行比较
allFiles.each { file ->
// 获取文件相对于文件夹的路径
def relativePath = folder1.toPath().relativize(file.toPath()).toString()
// 判断文件是否存在于两个文件夹中
def fileInFolder1 = new File(folder1, relativePath).exists()
def fileInFolder2 = new File(folder2, relativePath).exists()
if (fileInFolder1 && fileInFolder2) {
// 文件在两个文件夹中都存在,进行比较
def lines1 = FileUtils.readLines(new File(folder1, relativePath), StandardCharsets.UTF_8)
def lines2 = FileUtils.readLines(new File(folder2, relativePath), StandardCharsets.UTF_8)
def patch = DiffUtils.diff(lines1, lines2)
if (!patch.getDeltas().isEmpty()) {
// 文件有差异,将差异部分加入HTML文件
htmlContent += "<h2>${relativePath}</h2><pre>"
patch.getDeltas().each { delta ->
delta.getOriginal().getLines().each { line ->
htmlContent += "<span style=\"background-color: #FFCCCC;\">${line}</span>\n"
}
htmlContent += "<span style=\"background-color: #CCFFCC;\">${delta.getRevised().getLines().join('\n')}</span>\n"
}
htmlContent += "</pre>"
}
} else {
// 文件只在一个文件夹中存在,将文件路径加入HTML文件
htmlContent += "<h2>${relativePath}</h2><pre>Only exists in ${fileInFolder1 ? 'Folder 1' : 'Folder 2'}</pre>"
}
}
// 结束HTML文件
htmlContent += "</body></html>"
// 将HTML文件写入磁盘
FileUtils.writeStringToFile(new File(htmlFilePath), htmlContent, StandardCharsets.UTF_8)
// 输出成功信息
println("Folder diff report generated successfully: ${htmlFilePath}")
} catch (IOException e) {
// 输出失败信息
println("Folder diff report generation failed: ${e.getMessage()}")
}
```
这个脚本会先遍历两个文件夹中的所有文件,然后将每个文件与另一个文件夹中同名文件进行比较。如果文件在两个文件夹中都存在,就使用java-diff-util比较文件内容,并将差异部分加入HTML文件;如果文件只在一个文件夹中存在,就将文件路径加入HTML文件。最后,将生成的HTML文件写入磁盘。
阅读全文