java - 如何在java中替换现有文本文件中的单词

标签 java file bufferedreader filereader ioexception

我想将现有文本文件中的一个词替换为另一个词。我认为我的代码是正确的,但每当我运行该程序时,文本文件中的所有文本都会被删除。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Test {
    public static void main(String ar[]) throws IOException{

         String getText, putText;
         File f = new File("Test.txt");
         FileReader fr ;
         BufferedReader br ;
         BufferedWriter bw;
         if(f.exists()){
             try{
                 fr = new FileReader(f);
                 br = new BufferedReader(fr);
                 bw = new BufferedWriter(new FileWriter(f));
                 while((getText = br.readLine()) != null){
                     System.out.println(getText);
                     if(getText != null){
                         putText = getText.replaceFirst("Dog", "Cat");
                         bw.write(putText);
                     }   
                 }
                bw.close();
                br.close();
             }
             catch(IOException e){
                 e.printStackTrace();
             }
         }else{
             System.out.println("No File exists!");
         }
    }
}

最佳答案

您根本不应该在同一时间点读取和写入同一文件。

改为:从文件 A 中读取;并写入某个文件A.tmp

如果你真的想,你仍然可以删除 A,最后将 A.tmp 重命名为 A。 p>

最后,郑重声明:如果你的目标真的只是那个;要替换某些文本文件中的某些字符串,更合理的答案是查看 sed 等工具(或适用于 Windows 操作系统的一些替代方案)。

要仅替换某些字符串的第一次出现,您必须添加一些标记来告诉您是否已经替换,例如:

boolean replacingRequired = true;
while ( ... reading ...) 
  if (replacingRequired) {
     putText = getText.replaceFirst("Dog", "Cat")
     if (! putText.equals(getText)) {
       // when they are different, you replaced something!
       replacingRequired = false;
     }
  ...

Final finally:正如您现在询问的关于替换last 出现的问题...好吧,这是一个完全不同且更难 的问题。您看,您当前的方法是逐行读取该输入文件,更新该行,然后将其写入新文件。但是:逐行执行的代码如何知道 this 行......是最后一行包含您希望替换的模式的行?!简短回答:不能。

这里的简单解决方案;除非您的文件非常大,否则效果很好:

  1. 所有行读入字符串列表(例如使用method)
  2. 然后向后遍历该列表;并替换该列表中的第一次出现(向后走时是最后!)
  3. 更新的列表写入您的文件

关于java - 如何在java中替换现有文本文件中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40610294/

相关文章:

java - 系统化的 getter 和 setter 但需要避免死锁

java - 当文件中只有 1 个字节时,FileInputStream available 方法返回 2

java - 读入文件以创建二维数组单词搜索难题并解决

java - Bufferedreader 和通过 ASCII 编码的文件

java - 在 UTF-8 中打开 BufferedReader

java - 谁能告诉我这个错误的原因?

Java与 "frontwards"兼容性问题

java - 如何等待只有固定的 "*.txt"扩展名的文件?

java - 禁止在 map 长按时多次重新打开 Activity

python - 预填充 Django 表单 - request.FILES 和实例