Ryzen~ 2021-10-09 16:27 采纳率: 50%
浏览 23
已结题

JAVA的压缩,使用C#解压,解压异常,解压出的文件没有目录,是两种压缩方式不一致导致的么


    private static int BUFFER = 1024 * 4; // 缓冲大小
    private static byte[] B_ARRAY = new byte[BUFFER];
    /**
     * 压缩文件
     * @param sourceDir
     * @param zipFile
     */
    public static void zip(String sourceDir, String zipFile) throws Exception
    {
        OutputStream os = null;
        BufferedOutputStream bos = null;
        ZipOutputStream zos = null;
        try
        {
            File zip = new File(zipFile);
            if (!zip.getParentFile().exists())
                zip.getParentFile().mkdirs();
            os = new FileOutputStream(zipFile);
            bos = new BufferedOutputStream(os);
            zos = new ZipOutputStream(bos);
            File file = new File(sourceDir);
            String basePath = null;
            if (file.isDirectory())
            {
                basePath = file.getPath();
            }
            else
            {
                basePath = file.getParent();
            }
            basePath = basePath+""+File.separatorChar;
            zipFile(file, basePath, zos);
            zos.closeEntry();
        }
        catch (Exception e)
        {
            new BaseBean().writeLog("压缩文件出错:"+e);
            throw e;
        }
        finally
        {
            try
            
            {
                if(null!=zos)
                {
                    zos.close();
                }
            }
            catch(Exception e)
            {
                
            }
            try
            {
                if(null!=bos)
                {
                    bos.close();
                }
            }
            catch(Exception e)
            {
                
            }
            try
            {
                if(null!=os)
                {
                    os.close();
                }
            }
            catch(Exception e)
            {
                
            }
        }
    }

    /**
     * 递归压缩目录下的所有文件
     * @param source
     * @param basePath
     * @param zos
     */
    private static void zipFile(File source, String basePath, ZipOutputStream zos) throws Exception
    {
        File[] files = new File[0];
        if (source.isDirectory())
        {
            files = source.listFiles();
        }
        else
        {
            files = new File[1];
            files[0] = source;
        }
        String pathName;
        byte[] buf = new byte[1024];
        int length = 0;
        try
        {
            for (File file : files)
            {
                if (file.isDirectory())
                {
                    pathName = file.getPath().substring(basePath.length())+""+File.separatorChar;
                    //System.out.println("pathName 1 : "+pathName);
                    //zos.putNextEntry(new ZipEntry(pathName));
                    zipFile(file, basePath, zos);
                }
                else
                {
                    pathName = file.getPath().substring(basePath.length());
                    ZipEntry zipEntry = new ZipEntry(pathName);

                    zipEntry.setSize(file.length());
                    zipEntry.setTime(file.lastModified());
                    //System.out.println("pathName 2 : "+pathName);
                    InputStream is = new FileInputStream(file);
                    BufferedInputStream bis = new BufferedInputStream(is);
                    zos.putNextEntry(zipEntry);
                    while ((length = bis.read(buf)) > 0)
                    {
                        zos.write(buf, 0, length);
                    }
                    bis.close();
                    is.close();
                }
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
            new BaseBean().writeLog("压缩文件出错 zipFile : "+e);
            throw e;
        }
    }

img

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月17日
    • 创建了问题 10月9日

    悬赏问题

    • ¥15 Coze智能助手搭建过程中的问题请教
    • ¥15 12864只亮屏 不显示汉字
    • ¥20 三极管1000倍放大电路
    • ¥15 vscode报错如何解决
    • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
    • ¥15 python随机森林对两个excel表格读取,shap报错
    • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
    • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
    • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
    • ¥15 VFP如何使用阿里TTS实现文字转语音?