2014-08-28 65 views
1

我正在循環中將文本附加到CSV文件。問題是,整個過程需要很長的時間+ - 1小時(因爲服務器請求,但沒關係)。我希望能夠在進程中途遇到程序故障時再次運行它時重寫文件。如何打開和關閉文件作家追加?

這意味着,通常我想追加到CSV,但如果它是第一個循環(添加頭的循環,也沒關係),我想關閉我的追加。

這裏是檢查它是否與報頭循環(最前面的一個)或其他代碼:

FileWriter writer; 
    try { 
     writer = new FileWriter(sFileName, true); 
     if (!headers.equals("")) { 
      // here is the point which will not happen twice, just if i re-run the program 
      writer.append(headers); 
      writer.append('\n'); 
      writer.flush(); 
     } else { 
      // write values to the file 
      writer.append(values.toString()); 
     } 
     writer.flush(); 
     writer.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

我嘗試添加該writer = new FileWriter(sFileName, true);else這個:writer = new FileWriter(sFileName);if,沒有幫助。

如果看不清楚,請告訴我。

+0

你爲什麼不檢查文件是否是創建作家之前存在?假設該文件僅在第一次創建時纔會創建它 – Maas 2014-08-28 07:35:35

+0

您也可以在寫入方法開始時刪除該文件並重新創建該文件。 – brimborium 2014-08-28 07:37:21

+0

我可能會使用它,但如何刪除該文件? – 2014-08-28 07:38:01

回答

0

因爲你的程序知道是否要有條件追加里面,你可以在條件中創建您的作家,也:

if (headers.length != 0) { 
    writer = new FileWriter(sFileName);  // Do not append 
    // here is the point which will not happen twice, just if i re-run the program 
    writer.append(headers); 
    writer.append('\n'); 
} else { 
    writer = new FileWriter(sFileName, true); // Append 
    // write values to the file 
    writer.append(values.toString()); 
} 
writer.flush(); 
writer.close(); 
+0

請檢查我的編輯,我已經試過了,在程序結束時,文件只有幾條記錄,可能是最後一個循環。 – 2014-08-28 07:40:55

+0

@OndrejTokar這意味着有時候一個非空的'headers'變量會傳遞給您的方法,而您並不期望它,這非常接近輸出的結尾。 – dasblinkenlight 2014-08-28 07:43:03

+1

你想知道是什麼問題?我在if中做了writer.flush。這意味着我幾乎是正確的,但你是對的。謝謝 – 2014-08-28 07:47:59