我有两个大的制表符分隔文本文件。我要做的是比较它们并将更改写入新文件。为此我使用的是Apache Commons IO java库。输入以流的形式完成。由于它不需要花哨并且存在文件的集合结构,因此比较原理很简单。浏览第一个文件并使用部分行在第二个文件中搜索它。 正如你可以看到它为第一个文件的每一行循环遍历第二个文件(简化了示例,因为它在两行上进行了更多的解析,以确定键和部分以检查更改)。由于key始终是唯一的,我可以使用key的一部分来知道该部分的哪些行在文件中开始。我的问题我不知道如何操作lineIterator所以它从所述行开始,而不是从文件的开头。所以甚至可以操纵?如果是这样的话?或者我应该看看其他方式?
public static void main(String[] args) throws IOException {
File theFile = new File("first.txt");
File oldFile = new File("second.txt");
File targetFile = new File("changes.txt");
int counter = 0;
boolean found = false;
String key = null;
LineIterator update = FileUtils.lineIterator(theFile, "UTF-8");
try {
while (update.hasNext()) {
//update.nextLine();
counter++;
String line = update.nextLine();
String[] splitted = line.split("\\t");
key = splitted[0];
LineIterator old = FileUtils.lineIterator(oldFile, "UTF-8");
found = false;
while (old.hasNext() && !found) {
String oldLine = old.nextLine();
String[] content = oldLine.split("\\t");
if (oldLine.startsWith(key)) {
if (!content[2].equals(splitted[2])) {
System.out.println(counter + " [CHANGE FOUND]");
FileUtils.writeStringToFile(targetFile, line+"\t[TEXT CHANGE]\n", "UTF-8", true);
}
found = true;
}
}
if (!found) {
System.out.println(counter + " [NEW LINE]");
FileUtils.writeStringToFile(targetFile, line+"\t[NEW LINE]\n", "UTF-8", true);
}
old.close();
key = null;
}
} finally {
LineIterator.closeQuietly(update);
System.out.println("Checking Done");
}
}