【问题标题】:Java - checking .txt for existing text across all linesJava - 检查所有行中现有文本的 .txt
【发布时间】:2011-06-14 20:45:44
【问题描述】:

基本上,我希望根据某行是否已经存在来添加到 .txt 文件中。

即如果该行不存在,则将该行添加到 .txt 文件中。 如果 .txt 文件存在,请不要将该行添加到该文件中。

每一行都是独立的

例如

一个

两个

三个

而不是 一、二、三等。

我正在考虑使用 readLine() 但它似乎定义了有中断时的行尾,就像我的行一样。该方法不接受任何参数(例如行号),所以我很简短:/。

随便

【问题讨论】:

  • 除了换行符之外,如何定义行尾?

标签: java file io text-files readline


【解决方案1】:

您可以按照您的建议使用RandomAccessFilereadLine() 方法来读取文件的每一行,查找预期的文本。

来自 readLine() 的 javadoc:

一行文本以 回车符('\r'),一个 换行符('\n'),一个 立即回车符 后跟换行符,或 文件的结尾。

如果没有找到预期的文本,那么您可以使用RandomAccessFile 的一种写入方法,例如writeUTF()writeBytes() 将文本行添加到文件中。

【讨论】:

  • 但是如果我去使用 readLine() 会不会只读取第一行,然后终止?
  • 记住:行是这样的:一二三等。据我所知,只要有换行符,搜索就会停止。如何指定在哪一行上使用 readLine()?该方法不接受任何参数。感谢您的意见:)。
  • Aaah... 我刚刚阅读了您链接的 javadoc.. 似乎 readLine() 读取了下一行。这是否意味着每次,无论在哪里,只要它在同一个流中(例如它可以在流中的 for 循环中?)它都会调用下一行?
  • 没错,迈克。调用 readLine() 会使文件指针前进。
【解决方案2】:

为什么不使用循环逐行读取文本文件呢?在循环之后,如果没有找到该行,请将其附加到文件末尾。

【讨论】:

    【解决方案3】:

    您基本上必须首先扫描部分或整个文件以查找您要查找的单词,然后如果该单词不存在则附加该单词​​。

    你可以使用readLine(),但是如果你不介意第三方库,你可以试试Guava

    File theFile = ...
    String theWord = ...
    
    String text = Files.toString(theFile, "utf-8");
    if (!text.contains(theWord)) {
       Files.append(theWord,  theFile, "utf-8")
    }
    

    【讨论】:

    • 恐怕在这种情况下我将无法使用第 3 方库:/ 感谢您的输入
    • @Mike,方法还是一样的,只是稍微啰嗦了一点
    猜你喜欢
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 2011-09-15
    • 2011-08-20
    • 2012-06-16
    • 2013-10-27
    相关资源
    最近更新 更多