Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果以文件为单位出力成各自的HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件有差异的数据都出力到HTML中,解析两个文件的差异数据并将有差异的字段高亮显示出来;当文件只在一个文件夹中存在的文件,将这个信息出力到HTML中
时间: 2024-03-02 16:54:18 浏览: 77
以下是一个示例的Groovy脚本,它使用java-diff-utils库实现了两个文件夹的对比,并以HTML文件的形式输出比较结果:
```groovy
@Grab(group='com.googlecode.java-diff-utils', module='diffutils', version='1.3.0')
import difflib.*
import java.nio.file.*
// 定义两个文件夹路径
def folder1 = Paths.get("path/to/folder1")
def folder2 = Paths.get("path/to/folder2")
// 获取两个文件夹中的所有文件
def files1 = Files.walk(folder1)
.filter{Files.isRegularFile(it)}
.toList()
def files2 = Files.walk(folder2)
.filter{Files.isRegularFile(it)}
.toList()
// 对比两个文件夹中的所有文件,并将比较结果输出到HTML文件中
(files1 + files2).unique().each{ file ->
def path1 = folder1.relativize(file)
def path2 = folder2.relativize(file)
def html = new File("path/to/output/${file.fileName}.html")
if (files1.contains(file) && files2.contains(file)) {
// 文件在两个文件夹中都存在,进行比较
def content1 = Files.readAllLines(file)
def content2 = Files.readAllLines(folder2.resolve(path2))
def patch = DiffUtils.diff(content1, content2)
def diffHtml = generateHtmlDiff(patch, content1)
// 将比较结果输出到HTML文件中
html.text = diffHtml
} else {
// 文件只在一个文件夹中存在,输出信息到HTML文件中
def message = "File only exists in ${files1.contains(file) ? "folder1" : "folder2"}"
html.text = "<html><body><p>${message}</p></body></html>"
}
}
// 生成HTML格式的比较结果
def generateHtmlDiff(Patch patch, List<String> original) {
def diffHtml = new StringBuffer()
diffHtml << "<html><head><style>del { background-color: #ffe6e6; text-decoration: none; } ins { background-color: #e6ffe6; text-decoration: none; }</style></head><body>"
patch.getDeltas().each{ delta ->
def pos = delta.getOriginal().getPosition()
delta.getOriginal().getLines().eachWithIndex{ line, i ->
def type = delta.getTypeForOriginal(pos + i)
switch (type) {
case Delta.TYPE.DELETE:
diffHtml << "<del>${line}</del><br>"
break
case Delta.TYPE.CHANGE:
def revised = delta.getRevised().getLines().get(i)
diffHtml << "<del>${line}</del><ins>${revised}</ins><br>"
break
default:
diffHtml << "${line}<br>"
break
}
}
}
diffHtml << "</body></html>"
return diffHtml.toString()
}
```
这个脚本首先获取两个文件夹中的所有文件,然后对每个文件进行比较。如果文件在两个文件夹中都存在,就使用java-diff-utils库进行比较,并将比较结果输出到HTML文件中;如果文件只在一个文件夹中存在,就输出相应的提示信息到HTML文件中。同时,这个脚本还实现了解析两个文件的差异数据,并将有差异的字段高亮显示出来的功能。
阅读全文