2011-12-12 61 views
2

我必須編輯文件的內容並將編輯後的connt寫入另一個文件。這裏是iam使用的代碼。搜索並替換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();  
     }  
} 

所以這就像是一次只讀一行並將其打印迴文件。但是當我執行這個代碼時,輸​​出文件是空白的。你能否給我提供一個示例代碼,如何從文件中讀取,更改內容並將整個文件寫入新文件?

+0

不捕捉異常,什麼都不做!你可能正在消耗一個異常 - 至少在那裏添加一個e.printStackTrace()。 –

+0

Java不是一個縮寫,順便說一句。它只是「Java」,而不是「JAVA」。 –

回答

4

好了,有幾個問題:

  • 你永遠關閉或者您的輸入或你的產出。關閉也會刷新 - 有可能是某些東西沒有被刷新。您應該關閉finally區塊中的基於流的資源,以便即使面臨異常時它們也會關閉。 (既然你應該被關閉,我不會理會明確沖洗以及只要確保你關閉最高級的抽象。 - 即out(和br
  • 你捕捉Exception,然後吞嚥下去可能是因爲拋出異常,但是你不能說出來,因爲你吞下了它,你應該至少被記錄下來,並且可能在那時停止(我也建議捕捉IOException而不是Exception。)
  • 您使用的是FileWriterFileReader,它不允許您指定輸入/輸出編碼 - 這裏不是問題,b個人而言,我喜歡更多地控制我使用的編碼。我建議使用FileInputStreamFileOutputStream包裝在InputStreamReaderOutputStreamWriter
  • 你打電話給String.replace()並忽略結果。字符串是不可變的 - 調用replace將不會更改現有的字符串。你想:

    line = line.replace("Javascript"," JAVA"); 
    
  • 你永遠使用lines變量,你line變量將作爲本地變量更好。它只與方法本身有關,所以在該方法中只有聲明
  • 如果更合適的縮進,您的代碼將更容易遵循。如果您使用的是IDE,它應該能夠爲您做到這一點 - 它使可讀性差異很大。

第一個是你當前問題的最可能原因,但其他問題應該會在你過去的時候有所幫助。 (關於「替換」的觀點可能會成爲你的下一個問題......)

+0

我在他的代碼中看不到PrintWriter。 –

+1

@JamesClark:的確如此。不知道我從哪裏得到的。將編輯 - 感謝您發現它。 –

+0

Nops,PrintWriter在那裏,稍後編輯。我第一次閱讀代碼時看到了它。 @JonSkeet – Zohaib

0

你正在失去out.flush()

BufferedWriters不會寫任何東西,直到您刷新它們或緩衝區填滿爲止。

0

關閉循環外的打印作者。

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

而且你正在寫字符串到新的生產線,如果你只是想用Java來替換JavaScript,然後你也可能想要寫「\ n」,下一行字符到新文件,其中舊文件中包含新的生產線。

+0

您只需關閉 - 即可自動刷新。 –

+0

@JonSkeet同意。 – Zohaib