2013-04-09 46 views
0

我已经看到很多关于此的帖子,但我无法做到这一点。我需要做这样的事情..可以说, 我有两个文件a.txt,b.txt。 我应该在a.txt中搜索一个字符串/行,并将其替换为b.txt的内容。 我认为它的几行简单的代码。我试了下面的代码,但它不工作...Java:查找并替换一条线

File func = new File("a.txt"); 
BufferedReader br = new BufferedReader(new FileReader(func)); 

String line; 

while ((line = br.readLine()) != null) { 
    if (line.matches("line to replace")) { 
     br = new BufferedReader(
       new FileReader(func)); 
     StringBuffer whole = new StringBuffer(); 
     while ((line = br.readLine()) != null) { 
      whole.append(line.toString() + "\r\n"); 
     } 
     whole.toString().replace("line to replace", 
       "b.txt content"); 
     br.close(); 

     FileWriter writer = new FileWriter(func); 
     writer.write(whole.toString()); 
     writer.close(); 
     break; 
    } 
} 
br.close(); 

请帮忙!

+0

'writer.close();'和'br.close();'应该在while循环之外。另外,你应该在循环之外创建'writer'和'br'。 – Maroun 2013-04-09 13:48:47

回答

0

这里是解决这一问题的技术:

  1. 打开阅读的A.TXT文件。
  2. 打开b.txt文件进行阅读。
  3. 打开名为a.new.txt的输出文件。
  4. 从a.txt文件读取一行。
  5. 如果该行不是所需的行(要替换的行),请将行写入输出文件,然后执行步骤4.
  6. 将b.txt文件的内容附加到输出文件。
  7. 将a.txt的剩余内容附加到输出文件。
0

嗯......也许你能避免刚好与字符串类创建工作BufferedReader类的实例和:

public class Sample { 

public static void main(String[] args) throws Exception{ 
    File afile = new File("/home/mtataje/a.txt"); 

    String aContent = getFileContent(afile); 
    System.out.println("A content: "); 
    System.out.println(aContent); 
    System.out.println("==================="); 
    if (aContent.contains("java rulez")) { 
     File bfile = new File("/home/mtataje/b.txt"); 
     String bContent = getFileContent(bfile); 
     String myString = aContent.replace("java rulez", bContent); 
     System.out.println("New content: "); 
     System.out.println(myString); 
     afile.delete();//delete old file 
     writeFile(myString);//I replace the file by writing a new one with new content 
    } 
} 

public static void writeFile(String myString) throws IOException { 
    BufferedWriter bw = new BufferedWriter(new FileWriter(new File("/home/mtataje/a.txt"))); 
    bw.write(myString); 
    bw.close(); 
} 

public static String getFileContent(File f) throws IOException { 
    BufferedReader br = new BufferedReader(new FileReader(f)); 

    String line; 
    StringBuffer sa = new StringBuffer(); 
    while ((line = br.readLine()) != null) { 
     sa.append(line); 
     sa.append("\n"); 
    } 
    br.close(); 
    return sa.toString(); 
} 

我刚刚分开,以避免读取文件两次的方法相同的代码块。我希望它能帮助你,或者至少可以帮助你满足你的要求。最好的祝福。

+0

谢谢,我可以将b.txt中的内容复制到a.txt中,但是当我打开文件a.txt时,它没有任何更改......只有在控制台中显示替换的内容,但是实际的文件没有得到保存。任何想法? – 2013-04-10 03:44:34

+0

我修改了代码,以便为您提供一种可以保存更换中所做更改的方式。最好的祝福。 – 2013-04-10 13:09:37