2016-12-20 29 views
0

下面的代碼用於將HotelReportModel數據寫入csv文件。我打算用try-with-resources聲明取代try,但我應該如何處理filewritter.flush ?.裏面最後擋住了。嘗試使用資源如何調用刷新方法

 FileWriter fileWriter = null; 
     try { 
     fileWriter = new FileWriter(tempCSVFilePath); 
     fileWriter.append(hotelReportModel.getHeader()); 
     fileWriter.append(NEW_LINE_SEPARATOR); 

     for(HotelReportModel imageStat:hotelReportModel.getContent()){ 
      fileWriter.append(imageStat.getMarketerName()); 
      fileWriter.append(COMMA_DELIMITER); 
      fileWriter.append(imageStat.getChainCode()); 
      fileWriter.append(COMMA_DELIMITER); 
      fileWriter.append(imageStat.getPropertyId()); 
      fileWriter.append(COMMA_DELIMITER); 
      fileWriter.append(imageStat.getContentProvider()); 
      fileWriter.append(COMMA_DELIMITER); 
      fileWriter.append(String.valueOf(imageStat.getPropertyImageCount())); 
      fileWriter.append(NEW_LINE_SEPARATOR); 
     } 
     LOGGER.info("CSV file was created successfully !!!"); 
    } catch (Exception e) { 
     LOGGER.error("Error in CsvFileWriter !!!",e); 
    } finally { 
     try { 
      if(fileWriter != null) { 
       fileWriter.flush(); 
       fileWriter.close(); 
      } 
     } catch (IOException e) { 
      LOGGER.error("Error while flushing/closing fileWriter !!!",e); 
     } 
    } 

下面試試看資源是對的嗎?

  try(FileWriter fileWriter = = new FileWriter(tempCSVFilePath)) { 

     fileWriter.append(hotelReportModel.getHeader()); 
     fileWriter.append(NEW_LINE_SEPARATOR); 

     for(HotelReportModel imageStat:hotelReportModel.getContent()){ 
      fileWriter.append(imageStat.getMarketerName()); 
      fileWriter.append(COMMA_DELIMITER); 
      fileWriter.append(imageStat.getChainCode()); 
      fileWriter.append(COMMA_DELIMITER); 
      fileWriter.append(imageStat.getPropertyId()); 
      fileWriter.append(COMMA_DELIMITER); 
      fileWriter.append(imageStat.getContentProvider()); 
      fileWriter.append(COMMA_DELIMITER); 
      fileWriter.append(String.valueOf(imageStat.getPropertyImageCount())); 
      fileWriter.append(NEW_LINE_SEPARATOR); 
     } 
     LOGGER.info("CSV file was created successfully !!!"); 
    } catch (Exception e) { 
     LOGGER.error("Error in CsvFileWriter !!!",e); 
    } 
    } 
+3

無論如何'close'調用'flush',所以你不需要。 –

+0

喬恩你的意思是說,我可以需要刪除完整的最終塊嗎? – user1921479

+0

如果您使用試用資源,是的。 –

回答

4

您不必擔心,因爲你打電話close(從javadoc):

因爲在一個try-與資源聲明宣佈BufferedReader,它會無論try語句是正常還是突然完成,都可以關閉。

(他們的榜樣使用BufferedReader,但這並不重要,因爲這兩個BufferedReaderFileWriter實施AutoCloseable)。

因此,只需使用try with resources將關閉並沖洗fileWriter