2011-04-14 51 views
-1

我試圖用重複編寫組合文本文件,問題是我試圖在不知道java的內部工作原理的情況下一起破解一些代碼。當我重新安排代碼時,我不確定自己的影響。第一個Java程序(編寫文件排列)

import java.io.*; 

    public class Main { 
     public static void main(String args[]) { 
      brute("123", 3, new StringBuffer()); 
     } 
     static void brute(String input, int depth, StringBuffer output) { 
      if (depth == 0) { 
       // System.out.println(output); 
       { 
        try{ 
        // Create file 
        FileWriter fstream = new FileWriter("out.txt",true); 
         BufferedWriter out = new BufferedWriter(fstream); 
        out.write("blah" + output);} 

     else { 
      for (int i = 0; i < input.length(); i++) { 
       output.append(input.charAt(i)); 
       brute(input, depth - 1, output); 
       output.deleteCharAt(output.length() - 1); 
     } 
     } 

    } 
    } 

} 

任何幫助表示讚賞

+0

您是否可以編輯您的文章以使所有代碼看起來像代碼一樣幫助我們?謝謝! – 2011-04-14 22:21:40

+3

那麼,問題是什麼? – Aleadam 2011-04-14 22:23:19

+0

非常感謝 – 2011-04-14 22:24:08

回答

1

我想這個問題是您在運行的應用程序的結束得到一個空文件?

你應該簡化編寫代碼了位:

FileWriter fstream = new FileWriter("out.txt",true); 
BufferedWriter out = new BufferedWriter(fstream); 
out.write("blah" + output); 

你每次打開一個文件,寫出來。沒關係(最好把它寫到已經打開的流中),但是你不需要創建一個BufferedWriter,你可以簡化代碼。

FileWriter fstream = new FileWriter("out.txt", true); 
fstream.append(output); 

如果您運行此代碼,您仍然會發現它不起作用,它只是在磁盤上產生一個空文件。在使用它之後關閉它是很重要的。上述更改爲:

FileWriter fstream = new FileWriter("out.txt", true); 
fstream.append(output).append('\n'); 
fstream.close(); 

似乎使工作方案(有一個在代碼的一些語法錯誤,如忘記捕捉/拋出檢查異常,但我認爲這只是因爲代碼是在複製手動地)。

建議如何收拾這件事更多:

  • 寫入流,而不是打開和關閉文件每次你寫出來
  • 使用finally一個項目,以確保您的文件一直處於關閉狀態時,即使在發生異常時也是如此