在JAVA中搜索和替换文件中的内容

时间:2011-12-12 05:22:06

标签: java file file-writing fileupdate

我必须编辑文件的内容并将编辑过的conted写入另一个文件。这是我使用的代码。

  import java.io.*;     
import java.util.*;     

public class TestRef {     
    ArrayList<String> lines = new ArrayList<String>();     
    String line= null;     
    public void printThis(){     
        try{     
    FileReader fr = new FileReader("C:\\Users\\questions.txt");     
    BufferedReader br = new BufferedReader(fr);     
    FileWriter fw = new FileWriter("C:\\Users\\questions_out.txt");     
    BufferedWriter out = new BufferedWriter(fw);     
    while((line=br.readLine()) != null) {  
     if(line.contains("Javascript"))
      line.replace("Javascript"," JAVA");          
        lines.add(line);     
        out.write(line);  
        }                    

        }     
    catch(Exception e){}     
    }     

    public static void main(String [] args){     
            TestRef tr = new TestRef();     
            tr.printThis();     
        }     
} 

所以这就像一次读一行并将其打印回文件。但是当我执行此代码时,输​​出文件是空白的。能否请您提供示例代码,如何从文件中读取内容,更改内容并将整个文件写入新文件?

3 个答案:

答案 0 :(得分:4)

好吧,有几个问题:

  • 您永远不会关闭输入或输出。关闭也会冲洗 - 可能有些事情没有被冲洗。您应该在finally块中关闭基于流的资源,以便即使面对异常它们也会被关闭。 (鉴于你应该正在关闭,我也不会明确地刷新。只要确保你关闭顶级抽象 - 即out(和br
  • 你抓住了Exception,然后吞了它。很可能是异常被抛出,但你无法分辨,因为你吞下了它。你应该至少记录它,并可能在那时停止。 (我还建议抓取IOException而不是Exception。)
  • 您正在使用FileWriterFileReader,它不允许您指定输入/输出编码 - 这里不是问题,但我个人希望更多地控制我使用的编码。我建议在FileInputStreamFileOutputStream中使用InputStreamReaderOutputStreamWriter
  • 您正在调用String.replace()并忽略结果。字符串是不可变的 - 调用replace不会更改现有的字符串。你想要:

    line = line.replace("Javascript"," JAVA");
    
  • 您永远不会使用lines变量,而line变量会更好地作为本地变量。它只与方法本身相关,因此只有在方法中声明
  • 如果更合适的缩进,您的代码会更容易理解。如果您正在使用IDE,它应该能够为您执行此操作 - 它在可读性方面存在巨大的差异。

第一个是你当前问题的最可能原因,但其余的应该有助于你过去。 (关于“替换”的观点可能是你的下一个问题......)

答案 1 :(得分:0)

您遗失out.flush()

BufferedWriters在您刷新它们或缓冲区填满之前不会写任何东西。

答案 2 :(得分:0)

在循环外关闭打印编写器。

out.flush();
out.close();

此外,您正在为新行编写字符串,如果您只是想用Java替换javascript,那么您可能还想将'\ n',下一行字符写入新文件,其中旧文件包含新行。