Katalon8.6.0导入java-diff-util自动化比较两个文件夹,生成winMerge对比文件夹类似的report。要求大数据量文件适用
时间: 2024-02-27 07:56:14 浏览: 72
为了处理大数据量文件,在比较文件内容时,你可以使用流(Stream)而不是将整个文件加载到内存中。这将减少内存消耗并提高性能。以下是一个修改后的代码示例:
```
import java.io.BufferedReader;
import java.io.FileReader;
import java.nio.charset.StandardCharsets;
import difflib.DiffUtils;
import difflib.Patch;
import difflib.UnifiedDiffFormat;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class DiffFolders {
public static void main(String[] args) throws IOException {
// 比较文件夹的路径
String folder1 = "C:\\Folder1";
String folder2 = "C:\\Folder2";
String reportPath = "C:\\DiffReport\\";
// 创建Diff对象
difflib.Diff diff = new diff();
UnifiedDiffFormat unifiedDiffFormat = new UnifiedDiffFormat();
// 获取两个文件夹的文件列表
File[] files1 = new File(folder1).listFiles();
File[] files2 = new File(folder2).listFiles();
// 比较文件夹中的每个文件
for (int i = 0; i < files1.length; i++) {
String file1Name = files1[i].getName();
String file2Name = files2[i].getName();
if (file1Name.equals(file2Name)) {
// 如果文件名相同,则比较文件内容
List<String> lines1 = readFileByLines(files1[i]);
List<String> lines2 = readFileByLines(files2[i]);
Patch patch = diff.diff(lines1, lines2);
if (patch.getDeltas().size() > 0) {
// 如果文件内容不同,则生成报告
String reportName = file1Name + ".diff";
File reportFile = new File(reportPath + reportName);
FileWriter fileWriter = new FileWriter(reportFile);
unifiedDiffFormat.format(patch, lines1, lines2, file1Name, file2Name, 0);
List<String> unifiedDiffLines = unifiedDiffFormat.getLines();
for (String line : unifiedDiffLines) {
fileWriter.write(line, 0, line.length());
fileWriter.write(System.getProperty("line.separator"), 0, System.getProperty("line.separator").length());
}
fileWriter.flush();
fileWriter.close();
}
} else {
// 如果文件名不同,则生成报告
String reportName = file1Name + ".diff";
File reportFile = new File(reportPath + reportName);
FileWriter fileWriter = new FileWriter(reportFile);
fileWriter.write("Files are different: " + file1Name + ", " + file2Name);
fileWriter.flush();
fileWriter.close();
}
}
}
// 读取文件内容并返回每行内容的列表
private static List<String> readFileByLines(File file) throws IOException {
List<String> lines = new ArrayList<>();
BufferedReader reader = new BufferedReader(new FileReader(file, StandardCharsets.UTF_8));
String line = reader.readLine();
while (line != null) {
lines.add(line);
line = reader.readLine();
}
reader.close();
return lines;
}
}
```
在这个示例代码中,我们使用了 BufferedReader 和 FileReader 来读取文件的每一行内容,并返回一个 List<String>。在生成报告时,我们使用了 UnifiedDiffFormat 类来格式化文件差异并将其写入文件。
请注意,这个示例代码可能需要更改以适应你的特定环境和文件结构。
阅读全文