【问题标题】:How to replace a line in a text file using Java?如何使用 Java 替换文本文件中的一行?
【发布时间】:2015-02-16 04:24:15
【问题描述】:

我有一个文本文件,其中包含用“--”分隔的各种键值对。 以下是我到目前为止的代码

        File file = new File("C:\\StateTestFile.txt");
        BufferedWriter out = new BufferedWriter(file.getAbsolutePath());
        BufferedReader br = new BufferedReader(new FileReader(file));
        String line;
        while ((line = br.readLine()) != null) {
           if(line.contains("content_style")) {
               //Write to the line currently reading and save back to the file
           }
        }
        br.close();

        out.close();

我想要做的是阅读这个文本文件并用我指定的东西替换特定行的值。所以我想找到'content_style'行并将'posh'替换为'dirty'。

我该怎么做?

【问题讨论】:

  • 你能问一个更具体的问题吗?我们不是来为你做任务的。请参阅How do I ask a good question? 了解更多信息。
  • 参见StringreplacereplaceAll 方法。后者也可以使用正则表达式
  • 您可以完全按照您的描述执行此操作:读取文件、更改字符串、写入文件。如果您需要更详细的答案,则需要付出一些努力,例如您到目前为止所尝试的内容。
  • 我在这里看到的其他有用方法是String.splitString.contains
  • @Grice 我已经添加了我目前拥有的代码。希望它更清楚。

标签: java text replace


【解决方案1】:

简单地使用:

 line = line.replaceAll("posh", "dirty"); // as strings are immutable in java

【讨论】:

  • 这也有效。错误地,我尝试将它直接传递给 line ,这会覆盖替换的文本。
【解决方案2】:

只有当您确定要替换的字符串与替换它的字符串以字节为单位的长度完全相同时,才能在单个文件上就地完成此操作。否则,您无法在单个文件中添加或删除字符,但可以创建新文件。

  1. 打开源文件进行阅读。
  2. 打开目标文件进行写入。
  3. 读取源文件中的每一行,使用replaceAll,并将其写入目标文件。
  4. 关闭这两个文件。

保留键值语义的替代方法:

  1. 打开源文件进行阅读。
  2. 打开目标文件进行写入。
  3. 将源文件中的每一行拆分为一个键值对。如果密钥等于"content_style",则将密钥和"dirty" 写入目标文件。否则写键和值。
  4. 关闭这两个文件。

最后,删除旧文件并在旧文件之上重命名新文件。如果您要经常进行键值操作,并且不想一直写出新文件,那么使用数据库可能是值得的。寻找JDBC driver for SQLite

【讨论】:

  • 谢谢,这似乎是我需要的方法。我认为只读取和写入同一个文件很容易,但该行实际上并没有被保存回文件。
猜你喜欢
  • 2013-09-02
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
  • 2012-03-19
相关资源
最近更新 更多