尝试使用资源如何调用 flush 方法

Try with resource how to call flush method

以下代码用于将HotelReportModel数据写入csv文件。我打算用 try-with-resources 语句替换 try 但我应该如何处理 filewritter.flush?。在 finally 块内。

       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);
    } 
    }

您无需担心这一点,因为您正在调用 close(来自 javadoc):

Because the BufferedReader declared in a try-with-resource statement, it will be closed regardless of whether the try statement completes normally or abruptly.

(他们的示例使用了 BufferedReader,但这并不重要,因为 BufferedReaderFileWriter 都实现了 AutoCloseable)。

因此只需使用 try with resources 即可关闭并刷新 fileWriter