我可以从Apache Commons IO操作LineIterator来在文件中设置其起始行吗?

时间:2017-06-28 13:43:32

标签: java apache-commons-io

我有两个大的制表符分隔文本文件。我要做的是比较它们并将更改写入新文件。为此我使用的是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");
    }
}

0 个答案:

没有答案