Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果以文件为单位出力成各自的HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件有差异的数据都出力到HTML中,解析两个文件的差异数据并将有差异的字段高亮显示出来;当文件只在一个文件夹中存在的文件,将这个信息出力到HTML中
时间: 2024-03-02 18:52:18 浏览: 21
folder-diff:比较两个文件夹的工具
以下是一个使用java-diff-utils实现文件夹对比并生成HTML报告的Groovy脚本示例:
```groovy
@Grab(group='com.googlecode.java-diff-utils', module='diffutils', version='1.3.0')
import difflib.*
import java.nio.file.*
import java.util.stream.*
def compareFolders(Path folder1, Path folder2, Path outputFolder) {
def fileNames = (Files.walk(folder1).map {folder1.relativize(it)} + Files.walk(folder2).map {folder2.relativize(it)})
.filter {!it.toString().isEmpty()}
.distinct()
.toList()
fileNames.each { fileName ->
def file1 = folder1.resolve(fileName)
def file2 = folder2.resolve(fileName)
def output = outputFolder.resolve(fileName.toString()+".html")
if (Files.exists(file1) && Files.exists(file2)) {
def lines1 = Files.readAllLines(file1)
def lines2 = Files.readAllLines(file2)
def patch = DiffUtils.diff(lines1, lines2)
def html = new StringBuffer()
html.append("<html><head><title>File Comparison - ${fileName}</title></head><body>")
html.append("<div><h1>Comparison of file '${fileName}'</h1></div>")
html.append("<div><h3>Differences:</h3>")
html.append("<table border='1'><tr><th>File 1</th><th>File 2</th></tr>")
patch.getDeltas().each { delta ->
def pos1 = delta.getOriginal().getPosition()
def pos2 = delta.getRevised().getPosition()
delta.getOriginal().getLines().each { line ->
if (delta.getType() == Delta.TYPE.CHANGE || delta.getType() == Delta.TYPE.DELETE) {
html.append("<tr><td>${pos1++}</td><td></td><td>${line}</td></tr>")
} else {
html.append("<tr><td>${pos1++}</td><td>${pos2++}</td><td>${line}</td></tr>")
}
}
delta.getRevised().getLines().each { line ->
if (delta.getType() == Delta.TYPE.INSERT) {
html.append("<tr><td></td><td>${pos2++}</td><td>${line}</td></tr>")
}
}
}
html.append("</table></div>")
html.append("</body></html>")
Files.write(output, html.toString().getBytes())
} else {
def missingFile = Files.notExists(file1) ? file1 : file2
def html = new StringBuffer()
html.append("<html><head><title>File Comparison - ${fileName}</title></head><body>")
html.append("<div><h1>File '${fileName}' only exists in ${missingFile.getParent()}</h1></div>")
html.append("</body></html>")
Files.write(output, html.toString().getBytes())
}
}
}
// Example usage:
compareFolders(Paths.get("/path/to/folder1"), Paths.get("/path/to/folder2"), Paths.get("/path/to/output"))
```
这个脚本会对比两个文件夹中所有文件的内容,并将比较结果以HTML报告的形式输出到指定的文件夹中。如果两个文件夹中都存在同名文件,则会比较两个文件的内容并将差异数据高亮显示;如果只在一个文件夹中存在某个文件,则会将这个信息输出到报告中。
阅读全文