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



我必须编辑一个文件的内容,并将编辑后的内容写入另一个文件。下面是我使用的代码:

  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();     
        }     
} 

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

好吧,有几个问题:

  • 你永远不会关闭你的输入或输出。关闭也会刷新——有可能有些东西没有被刷新。您应该在finally块中关闭基于流的资源,这样即使面对异常,它们最终也会关闭。(假设你的应该关闭,我也不会费心显式地刷新。只要确保关闭了顶层抽象——即out(和br)。
  • 你正在捕捉Exception然后吞下它。很可能是抛出了一个异常,但您无法分辨,因为您已经吞下了它。您应该至少记录它,并可能在此停止。(我也建议捕捉IOException而不是Exception。)
  • 您使用的FileWriterFileReader不允许您指定输入/输出编码-不是这里的问题,但我个人喜欢对我使用的编码采取更多的控制。我建议使用FileInputStreamFileOutputStream包裹在InputStreamReaderOutputStreamWriter
  • 您正在调用String.replace()并忽略结果。字符串是不可变的——调用replace不会改变现有的字符串。你想要的:

    line = line.replace("Javascript"," JAVA");
    
  • 你永远不会使用你的lines变量,你的line变量作为本地变量会更好。它只与方法本身相关,所以只有在方法中声明它。
  • 你的代码将更容易遵循,如果它是更适当的缩进。如果你使用的是IDE,它应该能够为你做到这一点——它使在可读性上产生巨大的差异。

第一个是你当前问题的最有可能的原因,但当你过去的时候,其余的应该会有所帮助。(关于"替换"的问题可能是你的下一个问题…)

您缺少out.flush()

BufferedWriters不会写任何东西,除非你刷新它们,或者它们的缓冲区被填满。

在循环外关闭打印书写器

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

此外,你正在写字符串到新行,如果你只是想用Java代替javascript,那么你可能还想写'n',下一行字符到新文件,旧文件包含新行。

相关内容

  • 没有找到相关文章

最新更新