Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果以各文件名出力为HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件有差异的数据都出力到HTML中,解析两个文件的差异数据并将有差异的字段高亮显示出来;当文件只在一个文件夹中存在的文件,将结果出力到HTML中
时间: 2024-03-02 15:49:20 浏览: 59
以下是一个可能的实现:
```groovy
@Grab('com.googlecode.java-diff-utils:diffutils:1.3.0')
import difflib.*
import java.nio.file.*
import java.util.stream.*
// 定义要比较的两个文件夹路径
def dir1 = Paths.get('/path/to/dir1')
def dir2 = Paths.get('/path/to/dir2')
// 定义输出 HTML 文件的路径
def htmlPath = Paths.get('/path/to/output.html')
// 获取两个文件夹中所有的文件路径
def files1 = Files.walk(dir1).filter { !Files.isDirectory(it) }.toList()
def files2 = Files.walk(dir2).filter { !Files.isDirectory(it) }.toList()
// 定义输出 HTML 的 Writer
def writer = Files.newBufferedWriter(htmlPath)
// 开始比较每个文件
writer << '<html><body>'
for (file1 in files1) {
def file2 = dir2.resolve(dir1.relativize(file1))
if (Files.exists(file2)) {
// 如果两个文件都存在,就比较它们的内容
def lines1 = Files.readAllLines(file1)
def lines2 = Files.readAllLines(file2)
def patch = DiffUtils.diff(lines1, lines2)
if (patch.getDeltas().size() > 0) {
// 如果有差异,就输出到 HTML 中
writer << "<h2>${file1.getFileName()}</h2>"
writer << "<table>"
patch.getDeltas().each { delta ->
writer << "<tr><td>Lines ${delta.getOriginal().getPosition() + 1}-${delta.getOriginal().last() + 1}:</td>"
writer << "<td><pre>${delta.getOriginal().getLines().join('\n')}</pre></td>"
writer << "<td>Lines ${delta.getRevised().getPosition() + 1}-${delta.getRevised().last() + 1}:</td>"
writer << "<td><pre>${delta.getRevised().getLines().join('\n')}</pre></td></tr>"
}
writer << "</table>"
}
} else {
// 如果只在一个文件夹中存在,就输出到 HTML 中
writer << "<h2>${file1.getFileName()} (only in dir1)</h2>"
}
}
for (file2 in files2) {
def file1 = dir1.resolve(dir2.relativize(file2))
if (!Files.exists(file1)) {
// 如果只在一个文件夹中存在,就输出到 HTML 中
writer << "<h2>${file2.getFileName()} (only in dir2)</h2>"
}
}
writer << '</body></html>'
writer.close()
```
这个脚本会递归地遍历两个文件夹中的所有文件,并比较每一对同名文件的内容。如果两个文件内容不同,它会使用 Java-Diff-Utils 库生成一个差异补丁,并将差异输出到 HTML 文件中。如果只在一个文件夹中存在某个文件,它会将其输出到 HTML 中。
阅读全文