Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果以各文件名出力为HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件有差异的数据都出力到HTML中,解析两个文件的差异数据并将有差异的字段高亮显示出来;当文件只在一个文件夹中存在的文件,将结果出力到HTML中
时间: 2024-03-02 16:48:57 浏览: 46
以下是一个使用Katalon Studio和java-diff-utils库实现两个文件夹对比并输出HTML结果的Groovy脚本示例:
```groovy
import difflib.DiffUtils
import difflib.Patch
import java.nio.file.Files
import java.nio.file.Paths
// 定义两个文件夹的路径
def folder1 = "path/to/folder1"
def folder2 = "path/to/folder2"
// 获取两个文件夹中的所有文件路径
def files1 = new File(folder1).listFiles().collect { it.getAbsolutePath() }
def files2 = new File(folder2).listFiles().collect { it.getAbsolutePath() }
// 获取两个文件夹中共有的文件路径
def commonFiles = files1.intersect(files2)
// 获取只在一个文件夹中存在的文件路径
def uniqueFiles = (files1 - commonFiles) + (files2 - commonFiles)
// 定义HTML文件头部
def htmlHeader = """
<!DOCTYPE html>
<html>
<head>
<title>文件夹对比结果</title>
<style>
.added { background-color: #cfc; }
.removed { background-color: #fcc; }
</style>
</head>
<body>
<h1>文件夹对比结果</h1>
"""
// 定义HTML文件尾部
def htmlFooter = """
</body>
</html>
"""
// 遍历共有的文件,逐个比较并输出结果
commonFiles.each { filePath ->
// 读取两个文件的内容
def file1Content = Files.readAllLines(Paths.get("$folder1/$filePath")).join('\n')
def file2Content = Files.readAllLines(Paths.get("$folder2/$filePath")).join('\n')
// 使用java-diff-utils库比较两个文件内容的差异
def patch = DiffUtils.diff(file1Content.tokenize('\n'), file2Content.tokenize('\n'))
// 如果文件有差异,则输出结果到HTML文件中
if (patch.getDeltas().size() > 0) {
// 定义HTML文件名
def htmlFileName = "$filePath.html"
// 定义HTML文件内容
def htmlContent = """
<h2>$filePath</h2>
<table>
<thead>
<tr>
<th>文件1</th>
<th>文件2</th>
</tr>
</thead>
<tbody>
${patch.getDeltas().collect { delta ->
def original = delta.getOriginal().getLines().join('<br>')
def revised = delta.getRevised().getLines().join('<br>')
"""
<tr>
<td class='removed'>$original</td>
<td class='added'>$revised</td>
</tr>
"""
}.join('\n')}
</tbody>
</table>
"""
// 将HTML文件内容写入文件中
Files.write(Paths.get(htmlFileName), (htmlHeader + htmlContent + htmlFooter).getBytes())
}
}
// 遍历只在一个文件夹中存在的文件,输出结果到HTML文件中
uniqueFiles.each { filePath ->
// 定义HTML文件名
def htmlFileName = "$filePath.html"
// 定义HTML文件内容
def htmlContent = """
<h2>$filePath</h2>
<p>文件只存在于${files1.contains(filePath) ? '文件夹1' : '文件夹2'}</p>
"""
// 将HTML文件内容写入文件中
Files.write(Paths.get(htmlFileName), (htmlHeader + htmlContent + htmlFooter).getBytes())
}
```
该脚本会根据两个文件夹中的文件差异,输出相应的HTML文件。对于两个文件夹中都存在的文件,会将它们的差异以表格的形式输出,并将有差异的字段高亮显示;对于只在一个文件夹中存在的文件,会简单输出一个提示。注意,该脚本需要在Katalon Studio中运行,并且需要将java-diff-utils库添加到项目依赖中。
阅读全文