java ZipOutputStream打包zip后文件被占用无法删除

先上代码

 public static boolean fileToZip(String sourceFilePath,String zipFilePath,String fileName) {  
        boolean flag = false;  
        File sourceFile = new File(sourceFilePath);  
        FileInputStream fis = null;  
        BufferedInputStream bis = null;  
        BufferedOutputStream bos=null;
        FileOutputStream fos = null;  
        ZipOutputStream zos = null;  
          
        if(sourceFile.exists() == false) {  
            System.out.println(">>>>>> 待压缩的文件目录:" + sourceFilePath + " 不存在. <<<<<<");  
        } else {  
            try {  
                File zipFile = new File(zipFilePath + "/" + fileName + ".zip");
                if(zipFile.exists()){
                	if(DeleteFile.delete(zipFilePath + "/" + fileName + ".zip")){
                		System.out.println(">>>>>> 删除" + zipFilePath + fileName + ".zip" + " 文件成功. <<<<<<"); 
                	}
                }
                if(zipFile.exists()) {  
                    System.out.println(">>>>>> " + zipFilePath + " 目录下存在名字为:" + fileName + ".zip" + " 打包文件. <<<<<<");  
                } else {  
                    File[] sourceFiles = sourceFile.listFiles();  
                    if(null == sourceFiles || sourceFiles.length < 1) {  
                        System.out.println(">>>>>> 待压缩的文件目录:" + sourceFilePath + " 里面不存在文件,无需压缩. <<<<<<");  
                    } else {  
                        fos = new FileOutputStream(zipFile);  
                        bos =new BufferedOutputStream(fos);
                        zos = new ZipOutputStream(bos);  
                        byte[] bufs = new byte[1024*10];  
                        for(int i=0;i

主要原因还是自己对流不熟悉,for多个文件时,直接给流new一个新对象,所有导致之前的流对象在java虚拟机中没有被回收,所有才有了调用gc回收流

真的该好好复习基础知识了引用与对象

解决:
在for循环里把流关掉

for(int i=0;i

一直以为是java.util.zip.ZipEntry,java.util.zip.ZipOutputStream 没正确使用的问题

你可能感兴趣的:(java,工作中的问题)