尝试使用资源如何调用 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
,但这并不重要,因为 BufferedReader
和 FileWriter
都实现了 AutoCloseable
)。
因此只需使用 try with resources
即可关闭并刷新 fileWriter
。
以下代码用于将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
,但这并不重要,因为 BufferedReader
和 FileWriter
都实现了 AutoCloseable
)。
因此只需使用 try with resources
即可关闭并刷新 fileWriter
。