Katalon8.6.0中写一个Groovy脚本实现:利用java-diff-utils,实现自动化比较两个文件夹下的同名文件:如果文件只在一个文件夹中存在,将信息输出到result文件中;如果两个文件夹都存在,则将两个文件的比较结果和差异数据输出到result文件中。要求减少嵌套循环,且每次执行都重新生成result文件
时间: 2024-02-21 14:01:23 浏览: 9
以下是一个基本的实现,通过 Java-diff-utils 中的 `DiffRowGenerator` 类比较两个文件的差异,并将结果输出到 `result.txt` 文件中。该实现使用了 Java 8 中的新特性,如 `Files.walk()` 和 `Stream API`,以减少嵌套循环的使用。同时,每次执行都会重新生成 `result.txt` 文件。
```groovy
import difflib.DiffRowGenerator
import difflib.DiffUtils
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
// 定义两个文件夹路径
def folder1 = "D:/FileComp/folder1"
def folder2 = "D:/FileComp/folder2"
// 定义输出文件路径
def resultFile = "D:/FileComp/result.txt"
// 删除旧的输出文件
Files.deleteIfExists(Paths.get(resultFile))
// 获取两个文件夹下的所有文件路径
def files1 = Files.walk(Paths.get(folder1)).filter { Files.isRegularFile(it) }
def files2 = Files.walk(Paths.get(folder2)).filter { Files.isRegularFile(it) }
// 遍历每个文件路径,比较文件差异并将结果输出到 result 文件中
(files1 + files2)
.distinct() // 去重
.forEach { path ->
// 获取文件名和文件路径
def fileName = path.fileName.toString()
def filePath1 = Paths.get(folder1, fileName)
def filePath2 = Paths.get(folder2, fileName)
// 判断文件是否只存在于一个文件夹中
if (Files.exists(filePath1) != Files.exists(filePath2)) {
// 将信息输出到 result 文件中
def message = "File '$fileName' exists only in ${if (Files.exists(filePath1)) "folder1" else "folder2"}"
Files.write(Paths.get(resultFile), message, java.nio.file.StandardOpenOption.CREATE, java.nio.file.StandardOpenOption.APPEND)
} else {
// 比较两个文件的差异
def lines1 = Files.readAllLines(filePath1)
def lines2 = Files.readAllLines(filePath2)
def patch = DiffUtils.diff(lines1, lines2)
def generator = DiffRowGenerator.create().showInlineDiffs(true).inlineDiffByWord(true).oldTag(f -> "").newTag(f -> "").build()
def diff = generator.generateDiffRows(lines1, lines2, patch)
// 将比较结果和差异数据输出到 result 文件中
def message = "File '$fileName' exists in both folders, and the diff is:\n\n"
diff.each { row ->
message += row.oldLine + "\n"
}
Files.write(Paths.get(resultFile), message, java.nio.file.StandardOpenOption.CREATE, java.nio.file.StandardOpenOption.APPEND)
}
}
```
注意,该实现仅为基本示例,可能需要根据您的具体需求进行修改和调整。