阅读文件问题

时间:2014-01-30 21:57:04

标签: java

我有一个文本文件。我逐行读取这个文件并将其与列表进行比较。(我不想将整个文件保存在列表中,它有更多的数百万行)。当列表与文件中的行匹配时,我需要保留当前行的前4行和当前文件的下4行。我成功保留了接下来的4行,我可以保留前4行??? 你们能帮助我吗? 谢谢

public void compareTwoLists(List a, File f){ //read 4 before and after and compare
        // List a = searchArrayList
        // List b = listContainingTextArea
        List<String> l = new ArrayList<String>();
        String line = "";

    int count = 0;
    int lineNo;
    boolean b = false;
    BufferedReader textArea = null;
    try{
        textArea = new BufferedReader(new FileReader(f));

        for (int i = 0; i < a.size(); i++){
            System.out.println("test");
            b = false;
            while((line = textArea.readLine()) != null){

                if (a.get(i).toString().trim().toLowerCase().equals(line.toString().trim().toLowerCase())){
                    b = true;                        
                }
                if (b){
                    count++;                                                
                    if(count <= 4){
                        l.add(line);
                        System.out.println(line);
                    }else{
                        b = false;
                    }
                }
            }
        }
    }
    catch(Exception e){
        System.out.println("No such file was created");
    }
    finally{
        try{
            if (textArea != null){
                textArea.close();
            }
        }
        catch(IOException ioex){
            System.out.println("An error to close the file was produced");
        }
    }
}

2 个答案:

答案 0 :(得分:0)

根据您提供的少量信息,我认为您需要做的只是保留以前无法比拟的4行的缓冲区。你希望它基本上是一个永远不会超过4的FIFO(先进先出)队列。当你添加到最后,如果它大于4,你也从前面删除并丢弃。您可以使用LinkedList高效地执行此操作。匹配后,您可以从队列中获取行。

答案 1 :(得分:0)

保持一个4号的数组。 读取第1行,将其存储在0中的数组中 Readline2,将其存储在1的数组中 读取第3行,将其存储在2的数组中 读取第4行,将其存储在3中的数组中 如果到现在为止你没有获得比赛,那么你就不再需要第一线了。 因此,读取第5行,将其存储在0中的数组中。 读取第6行,将其存储在1的数组中。 这样你就可以在当前行之前保留4行。 如果你想要排序的行,那么每当你需要替换数组中的一行并且继续在索引3处添加时,你将不得不移动数组(仅当数组已经满了!!)