使用Katalon Studio的Groovy脚本来实现自动化比较两个文件夹下同名文件是否一致,并将比较结果输出到另一个文件中。要求不一致时定位到哪个文件的哪一行数据不一致
时间: 2023-12-03 17:42:02 浏览: 22
下面是一个用Katalon Studio和Groovy脚本实现自动化比较两个文件夹下同名文件是否一致,并将比较结果输出到另一个文件中的例子:
```groovy
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
// 定义需要比较的文件夹路径
def folder1 = "C:/Folder1"
def folder2 = "C:/Folder2"
// 定义输出比较结果的文件路径
def resultFile = "C:/Result.txt"
// 获取文件夹下的所有文件
def getFiles = { folder ->
Files.walk(Paths.get(folder))
.filter{ !Files.isDirectory(it) }
.map{ it.toFile() }
.toList()
}
// 获取文件的行数据
def getLines = { file ->
Files.readAllLines(file.toPath())
}
// 比较两个文件是否一致
def compareFiles = { file1, file2 ->
def lines1 = getLines(file1)
def lines2 = getLines(file2)
if (lines1.size() != lines2.size()) {
return "不一致: ${file1.getAbsolutePath()}, ${file2.getAbsolutePath()} 行数不同"
}
for (int i = 0; i < lines1.size(); i++) {
if (lines1[i] != lines2[i]) {
return "不一致: ${file1.getAbsolutePath()} 第 ${i+1} 行不同, ${file2.getAbsolutePath()} 第 ${i+1} 行不同"
}
}
return "一致: ${file1.getAbsolutePath()}, ${file2.getAbsolutePath()}"
}
// 获取同名文件并比较
def files1 = getFiles(folder1)
def files2 = getFiles(folder2)
def result = files1.collect { file1 ->
def file2 = files2.find { it.getName() == file1.getName() }
if (file2) {
compareFiles(file1, file2)
} else {
"只在 ${folder1} 中找到: ${file1.getAbsolutePath()}"
}
}.concat(files2.collect { file2 ->
def file1 = files1.find { it.getName() == file2.getName() }
if (!file1) {
"只在 ${folder2} 中找到: ${file2.getAbsolutePath()}"
}
})
// 输出比较结果到文件
new File(resultFile).withPrintWriter { writer ->
result.each {
writer.println(it)
}
}
```
这个脚本首先定义了需要比较的两个文件夹路径和输出比较结果的文件路径。然后通过`getFiles`函数获取文件夹下的所有文件,通过`getLines`函数获取文件的行数据。接着通过`compareFiles`函数比较两个文件是否一致,如果不一致则返回一个错误信息。最后通过`files1`和`files2`获取同名文件并比较,将比较结果存储在`result`数组中,最后将`result`输出到文件中。