Sonar: How to use try-with-resources to close FileOutputStream(声纳:如何使用 try-with-resources 关闭 FileOutputStream)
问题描述
Sonar 给出了一个错误,提示该 FileOutputStream 应该被关闭.我需要修改以下代码以使用 try-with-resources.我该怎么做?
Sonar is giving an error that this FileOutputStream should be closed. I need to modify the following code to use try-with-resources. How do I do this?
public void archivingTheFile(String zipFile){
    byte[] buffer = new byte[1024];
    try{
        FileOutputStream fos = new FileOutputStream(zipFile);
        ZipOutputStream zos = new ZipOutputStream(fos);
        for(String file : this.fileList){
            ZipEntry ze= new ZipEntry(file);
            zos.putNextEntry(ze);
            FileInputStream in = new FileInputStream(SOURCE_FOLDER + File.separator + file);
            int len;
            while ((len = in.read(buffer)) > 0) {
                zos.write(buffer, 0, len);
            }
            in.close();
        }
        zos.closeEntry();
        zos.close();
    }catch(IOException ex){
        LOGGER.error("Exception occurred while zipping file",ex);
    }
}
推荐答案
当前代码还没有准备好处理异常 - 你缺少 finally 块来关闭打开的流.而且,当然,你是对的 - 使用 try-with-resources 解决了这个问题:
Currently code is not ready to handle exceptions - you're missing finally block to close open streams. And, sure, you're right - using try-with-resources solves this problem:
public void archivingTheFile(String zipFile) {
    byte[] buffer = new byte[1024];
    try (FileOutputStream fos = new FileOutputStream(zipFile);
         ZipOutputStream zos = new ZipOutputStream(fos)) {
        for(String file : this.fileList) {
            try (FileInputStream in = new FileInputStream(SOURCE_FOLDER + File.separator + file)) {
                ZipEntry ze = new ZipEntry(file);
                zos.putNextEntry(ze);
                int len;
                while ((len = in.read(buffer)) > 0) {
                    zos.write(buffer, 0, len);
                }
            }
        }
    } catch(IOException ex) {
        LOGGER.error("Exception occurred while zipping file",ex);
    }
}
                        这篇关于声纳:如何使用 try-with-resources 关闭 FileOutputStream的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:声纳:如何使用 try-with-resources 关闭 FileOutputStream
				
        
 
            
        - Spring Boot连接到使用仲裁器运行的MongoDB副本集 2022-01-01
 - 将log4j 1.2配置转换为log4j 2配置 2022-01-01
 - value & 是什么意思?0xff 在 Java 中做什么? 2022-01-01
 - Safepoint+stats 日志,输出 JDK12 中没有 vmop 操作 2022-01-01
 - Java包名称中单词分隔符的约定是什么? 2022-01-01
 - 如何使用WebFilter实现授权头检查 2022-01-01
 - Eclipse 插件更新错误日志在哪里? 2022-01-01
 - Jersey REST 客户端:发布多部分数据 2022-01-01
 - 从 finally 块返回时 Java 的奇怪行为 2022-01-01
 - C++ 和 Java 进程之间的共享内存 2022-01-01
 
						
						
						
						
						