[英]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;
}
...
最终的最终结果:正如您现在正在询问要替换上次出现的问题一样 ……那是一个完全不同且困难的问题。 您会看到,当前的方法是逐行读取该输入文件,更新该行并将其写入新文件。 但是:逐行执行的代码如何知道这一行...是最后一个承载您希望替换的模式的代码? 简短的回答:不能。
这里的简单解决方案; 除非文件很大,否则效果很好:
您应该尝试复制文件,而不是在同一文件中读写
尝试这个,
....
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.