Katalon8.6.0中写一个Groovy脚本实现:利用java-diff-utils,实现自动化比较两个文件夹下的同名文件:如果文件只在一个文件夹中存在,将信息输出到result文件中;如果两个文件夹都存在,则将两个文件的比较结果和差异数据输出到result文件中。要求减少嵌套循环,且每次执行都重新生成result文件
时间: 2024-02-21 15:01:05 浏览: 68
好的,我知道你的要求了,以下是实现该功能的Groovy脚本:
```groovy
@Grab(group='com.googlecode.java-diff-utils', module='diffutils', version='1.3.0')
import difflib.*
import java.nio.file.*
import java.nio.charset.*
// 定义两个文件夹的路径
def folder1 = Paths.get("path/to/folder1")
def folder2 = Paths.get("path/to/folder2")
// 定义结果输出文件的路径
def resultFile = Paths.get("path/to/result/file.txt")
// 删除原有的结果输出文件
Files.deleteIfExists(resultFile)
// 遍历文件夹1中的所有文件
Files.walk(folder1).filter { Files.isRegularFile(it) }.forEach { file1 ->
def file2 = folder2.resolve(file1.relativize(folder1))
if (Files.exists(file2)) {
// 如果两个文件夹都存在同名文件,则比较文件内容
def lines1 = Files.readAllLines(file1, StandardCharsets.UTF_8)
def lines2 = Files.readAllLines(file2, StandardCharsets.UTF_8)
def patch = DiffUtils.diff(lines1, lines2)
if (!patch.getDeltas().isEmpty()) {
// 如果两个文件内容不同,则将比较结果和差异数据输出到结果文件中
Files.write(resultFile, "File ${file1.getFileName()}:\n", StandardOpenOption.APPEND, StandardOpenOption.CREATE)
patch.getDeltas().each { delta ->
Files.write(resultFile, "${delta.getType()} delta between lines ${delta.getOriginal().getPosition()+1} and ${delta.getOriginal().last()+1}:\n", StandardOpenOption.APPEND)
delta.getOriginal().getLines().each { line ->
Files.write(resultFile, "< $line\n", StandardOpenOption.APPEND)
}
delta.getRevised().getLines().each { line ->
Files.write(resultFile, "> $line\n", StandardOpenOption.APPEND)
}
}
}
} else {
// 如果文件只在一个文件夹中存在,则将信息输出到结果文件中
Files.write(resultFile, "File ${file1.getFileName()} only exists in folder1.\n", StandardOpenOption.APPEND, StandardOpenOption.CREATE)
}
}
Files.walk(folder2).filter { Files.isRegularFile(it) }.forEach { file2 ->
def file1 = folder1.resolve(file2.relativize(folder2))
if (!Files.exists(file1)) {
// 如果文件只在一个文件夹中存在,则将信息输出到结果文件中
Files.write(resultFile, "File ${file2.getFileName()} only exists in folder2.\n", StandardOpenOption.APPEND, StandardOpenOption.CREATE)
}
}
```
该脚本使用Java的`java.nio.file`包遍历指定的两个文件夹中的所有文件,并分别对同名文件进行比较。如果文件内容相同,则跳过;如果文件内容不同,则将比较结果和差异数据输出到指定的结果输出文件中。如果某个文件只在一个文件夹中存在,则将信息输出到结果文件中。
同时,该脚本使用了Java的`java-diff-utils`库来实现文件内容的比较,避免了嵌套循环的问题。另外,每次执行时都会删除原有的结果输出文件,并重新生成一个新的结果输出文件。
阅读全文