尝试使用资源如何调用刷新方法[重复]
Posted
技术标签:
【中文标题】尝试使用资源如何调用刷新方法[重复]【英文标题】:Try with resource how to call flush method [duplicate] 【发布时间】:2016-12-20 13:38:29 【问题描述】:以下代码用于将 HotelReportModel 数据写入 csv 文件。我打算用 try-with-resources 语句替换 try 但我应该如何处理 filewriteter.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
无论如何都会调用flush
,所以你不需要。
乔恩你的意思是说我可以删除完整的 finally 块吗?
如果你使用 try-with-resources,是的。
【参考方案1】:
您无需担心这一点,因为您正在调用close
(来自javadoc):
因为在try-with-resource语句中声明了
BufferedReader
,所以无论try语句正常完成还是突然完成都会关闭。
(他们的示例使用了BufferedReader
,但这并不重要,因为BufferedReader
和FileWriter
都实现了AutoCloseable
)。
所以简单地使用try with resources
将关闭和刷新fileWriter
。
【讨论】:
以上是关于尝试使用资源如何调用刷新方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章
调用 recreate() 方法时 TextInputLayout 提示不会刷新