当前位置: 首页 > 面试题库 >

替换文件中的字符串

公冶高义
2023-03-14
问题内容

我正在寻找一种替换文件中的字符串而不将整个文件读入内存的方法。通常我会使用Reader和Writer,例如以下内容:

public static void replace(String oldstring, String newstring, File in, File out)
    throws IOException {

    BufferedReader reader = new BufferedReader(new FileReader(in));
    PrintWriter writer = new PrintWriter(new FileWriter(out));
    String line = null;
    while ((line = reader.readLine()) != null)
        writer.println(line.replaceAll(oldstring,newstring));

    // I'm aware of the potential for resource leaks here. Proper resource
    // handling has been omitted in the interest of brevity
    reader.close();
    writer.close();
}

但是,我想就地进行替换,并且不认为可以同时在同一文件上打开Reader和Writer。另外,我正在使用Java 1.4,因此无法访问NIO,扫描仪等。

谢谢唐


问题答案:

通常无法对文件进行“就地”替换,除非替换的长度与原始长度完全相同。否则,文件将需要增大,从而将所有后面的字节“改组”到“右侧”,或者缩小。这样做的常见方法是读取文件,将替换文件写入临时文件,然后用临时文件替换原始文件。

这也具有以下优点:所讨论的文件始终处于原始状态或完全替换状态,而不会介于两者之间。



 类似资料:
  • 问题内容: 我使用md5 grunt任务生成MD5文件名。现在,我想在任务的回调中使用新文件名重命名HTML文件中的源。我想知道什么是最简单的方法。 问题答案: 您可以使用简单的正则表达式: 所以…

  • 我想在文本文件中用新的英文字符替换突厥语字符{code>{c',c',I',I',G',G',S',S}。 这是我的密码。我在控制台上只获得原始内容,没有任何更改,也不会创建新文件。 编辑: 这是适用于我的新代码。但是我想使用一个较短的代码来替换方法。

  • 问题内容: 我一直试图读取文件,然后将读取的内容放入字符串中。然后,该字符串将按行拆分为多个字符串: input.txt读取为: 一个 强壮的小鸟 与一个非常 宽容的心 去 一天上学 忘记了他的食物 家 然而, 将文本变成混乱的混乱: 他的食物 我不确定替换换行符会如何严重破坏文本本身 问题答案: 我猜您正在使用Windows运行代码。请注意,如果您打印出结果字符串的长度,它将显示超过100个字符

  • 问题内容: 我有一个名为log.txt的文本文件,它具有以下数据 第一个逗号之前的数字是指定每个项目的索引。 我想做的是读取文件,然后将给定行中字符串的一部分(例如textFiles / a.txt)替换为另一值(例如something / bob.txt)。 这就是我到目前为止 问题答案: 一种方法是使用: 您还可以使用正则表达式,或查找搜索字符串在一行中的何处。

  • 问题内容: 我需要打开一个文本文件并替换一个字符串。我需要这个 到目前为止,这是我所拥有的,但是除了多余的空格外,我看不到文本文件中的任何更改。 我该怎么做? 问题答案: 这项工作:

  • 问题内容: 我想在编译代码之前替换Config.java文件中的几行。我所能找到的就是在复制过程中通过过滤器解析文件。一旦我必须将其复制,就必须将其保存在某处- 这就是我寻求解决方案的原因:在替换行时复制到临时位置>删除原始文件>将重复的文件复制回到原始位置>删除临时文件。有更好的解决方案吗? 问题答案: 也许您应该尝试使用类似ant的replaceregexp的方法: 此任务将用替换所有的出现。