katalon8.6.0导入java-diff-util,利用java8写一个Groovy脚本:比较两个文件夹中的所有csv文件(均为GBK编码),如果文件在两个文件夹中都存在但内容不同,则将差异以HTML格式呈现,并将差异字段高亮显示。如果文件只在一个文件夹中存在,则将其标记为“文件不存在”。要求提高性能
时间: 2024-02-27 08:53:18 浏览: 74
可以使用以下代码来实现:
```groovy
@Grab(group='com.googlecode.java-diff-utils', module='diffutils', version='4.11')
import difflib.DiffUtils
import java.nio.charset.Charset
import java.nio.file.Files
def folder1 = new File("path/to/folder1")
def folder2 = new File("path/to/folder2")
def htmlOutputFolder = new File("path/to/output/folder")
// 获取两个文件夹中所有的 CSV 文件
def files1 = folder1.listFiles({file -> file.isFile() && file.getName().toLowerCase().endsWith(".csv")})
def files2 = folder2.listFiles({file -> file.isFile() && file.getName().toLowerCase().endsWith(".csv")})
// 将两个文件夹中的文件名保存到 Set 中
def fileNames1 = files1.collect {it.getName()}.toSet()
def fileNames2 = files2.collect {it.getName()}.toSet()
// 获取文件名的交集和差集
def commonFileNames = fileNames1.intersect(fileNames2)
def uniqueFileNames1 = fileNames1.minus(commonFileNames)
def uniqueFileNames2 = fileNames2.minus(commonFileNames)
// 遍历交集中的文件,比较文件内容并生成 HTML 报告
commonFileNames.each { fileName ->
def file1 = new File(folder1, fileName)
def file2 = new File(folder2, fileName)
def lines1 = Files.readAllLines(file1.toPath(), Charset.forName("GBK"))
def lines2 = Files.readAllLines(file2.toPath(), Charset.forName("GBK"))
def utf8Lines1 = lines1.collect { it.getBytes("UTF-8") }.collect { new String(it, "UTF-8") }
def utf8Lines2 = lines2.collect { it.getBytes("UTF-8") }.collect { new String(it, "UTF-8") }
def diff = DiffUtils.diff(utf8Lines1, utf8Lines2)
if (!diff.getDeltas().isEmpty()) {
// Differences found, generate HTML report
def html = DiffUtils.htmlDiff(utf8Lines1, utf8Lines2)
def diffFile = new File(htmlOutputFolder, "${fileName}-diff.html")
Files.write(diffFile.toPath(), html.getBytes())
}
}
// 遍历文件名差集,标记文件不存在
uniqueFileNames1.each { fileName ->
def file = new File(folder1, fileName)
def diffFile = new File(htmlOutputFolder, "${fileName}-diff.html")
Files.write(diffFile.toPath(), "File does not exist in folder2".getBytes())
}
uniqueFileNames2.each { fileName ->
def file = new File(folder2, fileName)
def diffFile = new File(htmlOutputFolder, "${fileName}-diff.html")
Files.write(diffFile.toPath(), "File does not exist in folder1".getBytes())
}
```
这个脚本会先获取两个文件夹中所有的 CSV 文件,然后将它们的文件名保存到 Set 中,再获取文件名的交集和差集。遍历交集中的文件,读取文件内容并使用 `DiffUtils` 比较文件内容,如果文件内容不同,则生成 HTML 报告并将差异字段高亮显示。遍历文件名差集,标记文件不存在。注意,在读取文件时,需要将文件内容转换为 UTF-8 编码,以避免编码问题。
阅读全文