2017-08-02 78 views
-1

我想將控制檯行打印到txt文件。我希望在else語句中執行此操作,但它只寫入文件最後一條記錄。如何修復它?當我嘗試緩衝讀者它無法解決我的問題。感謝大家。有一個美好的一天。你給我的建議是哪種解決方案?將文件寫入數組只寫入數組中的最後一條記錄

for(int iy=0;iy<arr.length;iy++){ 

    if(arr[iy].contains("•") || arr[iy].contains("Contact") || arr[iy].contains("@") || arr[iy].contains("Activities and Societies") || arr[iy].contains("Page")){ 

    }    
    else if(arr[iy].contains("Summary")){ 
     //System.out.println(arr[iy]+"enes"); 
     while(exit==false){ 
      iy++; 

      if(arr[iy].contains("Experience")){ 
       exit=true; 
      } 
     }   
    }    
    else if(arr[iy].contains("Skills") || arr[iy].contains("Languages")){ 

     while(exit==false){ 
      iy++; 

      if(arr[iy].contains("Education")){ 
       exit=true; 
      } 
     } 
    }        
    else 
    {     
     System.out.println(arr[iy]); 

     try(PrintWriter bw = new PrintWriter(new FileWriter(FILENAME2))){ 

      bw.write(arr[iy]); 
      //out.newLine(); 
      bw.flush(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    }      
} 
+2

歡迎來到Stack Overflow!尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:如何創建[mcve]。使用「編輯」鏈接來改善你的*問題* - 不要通過評論添加更多信息。謝謝! – GhostCat

+2

除此之外:您希望我們花* *時間來幫助您解決問題。你應該儘可能簡單。因此,請花1分鐘時間來正確縮進/格式化所有源代碼。你知道,*預覽*窗口存在的原因 - 圍繞編輯窗口的許多解釋相同。 – GhostCat

+2

最後:閱讀關於* clean *的代碼。這段代碼難以閱讀的次數比它應該多10倍(不僅因爲懶惰的格式化,而且還因爲結構過於複雜)。毫無疑問,您需要其他人來確定這個混亂中的問題。 – GhostCat

回答

0

您的代碼非常複雜,但最後一行寫入的原因很明顯 - 您打開要輸出的每一行的文件,並覆蓋該文件的以前內容。

  • 您不應該打開和關閉每行的文件。在循環之前打開一次,並在循環之後關閉它。

  • 如果多次打開和關閉文件確實有意義,則應該以附加模式打開FileWriter(使用new FileWriter(FILENAME2,true))。

+0

謝謝伊蘭我嘗試第二個選項,它解決了,但在一行中的txt文件句子,你知道我怎麼能添加數組元素之間的換行符? – TheFlash

+0

@TheFlash'bw.println(arr [iy]);' – Eran

0

看起來您正在循環的每一步重新創建PrintWriter,這會覆蓋文件。在循環之前創建它,然後關閉它。