繁体   English   中英

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

[英]How to replace a word in an exisiting text file in java

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

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。

最后,记录一下:如果您的目标确实如此; 要替换某些文本文件中的某些字符串,更合理的答案是研究诸如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;
     }
  ...

最终的最终结果:正如您现在正在询问要替换上次出现的问题一样 ……那是一个完全不同且困难的问题。 您会看到,当前的方法是逐行读取该输入文件,更新该行并将其写入新文件。 但是:逐行执行的代码如何知道这一行...是最后一个承载您希望替换的模式的代码? 简短的回答:不能。

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

  1. 所有行读入字符串列表(例如,使用此方法
  2. 然后向后浏览该列表; 并替换该列表中的第一个匹配项(向后走时是最后一个匹配项!)
  3. 更新的列表写入文件

您应该尝试复制文件,而不是在同一文件中读写

尝试这个,

      ....
     StringBuilder fullText =new StringBuilder();
      while((getText = br.readLine()) != null){
            putText = ""; 
            if(getText != null){
                putText = getText.replaceFirst("Dog", "Cat"); 
            }   
            fullText.append(putText);
        } 
    br.close();
    bw.write(putText);
    bw.close()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM