检查文本文件中是否已存在要写入文本文件的字符串/行

时间:2016-10-02 07:25:36

标签: java file-io duplicates distinct

我正在分析Web访问日志,并尝试找出访问日志中仅请求过一次的所有唯一对象(任何文件或任何路径)。每次程序写入文本文件时,文本文件的内容如下所示:

.as-console-wrapper { max-height: 100% !important; top: 0; }

我想检查要写入文本文件的行是否已存在于文本文件中。换句话说,如果它在文本文件中确实存在,那么什么也不做,跳过它并分析下一行。如果没有,则将其写入文本文件。

我尝试使用/~scottp/publish.html /~ladd/ostriches.html /~scottp/publish.html /~lowey/ /~lowey/kevin.gif /~friesend/tolkien/rootpage.html /~scottp/free.html /~friesend/tolkien/rootpage.html . . . equals,但它似乎不起作用,这里是我的代码的一小部分:

contains

我该怎么做才能真正执行支票?

2 个答案:

答案 0 :(得分:1)

正如@JB Nizet评论的那样,你应该使用Set

Set<String> set = new HashSet<String>();

BufferedReader reader = new BufferedReader(new FileReader(new File("/path/to/yourFile.txt")));

String line;

while((line = reader.readLine()) != null) {

    // duplicate
    if(set.contains(line))
        continue;

    set.add(line);

    // do your work here

}

答案 1 :(得分:1)

也许这样简单:

try (BufferedReader br = new BufferedReader(new FileReader(yourFilePath))) {
    boolean lineExists = false; 
    String currentLine;
    while ((currentLine = br.readLine()) != null) {
        if (currentLine.trim().equalsIgnoreCase(requestFileName.trim())) { 
            lineExists = true;
            break;
        }
    }
    br.close();

    if (!lineExists) {
        bw.write(requestFileName);
        bw.newLine();
    }
}
catch (IOException e) { 
    // Do what you want with Exception...
}