2

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

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

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

4

3 回答 3

4

嗯,有几个问题:

  • 您永远不会关闭输入或输出。关闭也会刷新 - 有可能某些东西没有被刷新。您应该在一个finally块中关闭基于流的资源,这样即使在遇到异常时它们最终也会被关闭。(鉴于您应该关闭,我也不会费心显式刷新。只要确保关闭顶级抽象 - 即out(和br)。
  • 你抓住Exception然后吞下它。很可能是抛出了一个异常,但你无法分辨,因为你已经吞下了它。您至少应该记录它,并且可能在那时停止。(我也建议 catchIOException而不是Exception.)
  • 您正在使用FileWriter并且FileReader不允许您指定输入/输出编码 - 不是这里的问题,但我个人喜欢对我使用的编码进行更多控制。我建议使用FileInputStreamandFileOutputStream包裹在InputStreamReaderand中OutputStreamWriter
  • 你打电话String.replace()并忽略了结果。字符串是不可变的——调用replace不会改变现有的字符串。你要:

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

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

于 2011-12-12T05:27:16.170 回答
0

你失踪了out.flush()

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

于 2011-12-12T05:26:52.643 回答
0

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

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

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

于 2011-12-12T05:27:54.627 回答