谁能搞定这个zip打包问题。

会写程序的摄影师 2013-10-14 04:55:55
我要用java将一个文件夹压缩,如果压缩之后大于5M,就分包压缩比如18M就会生成4个压缩包,每个包不超过5M。然后会发到另一端,又对他们进行解压成最开始的文件夹。有没有人遇到过这个问题,求讲解。
...全文
746 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 1 楼 huxiweng 的回复:
思路都很清晰,只不过就是几个if 判断。
求指导
  • 打赏
  • 举报
回复
引用 2 楼 AA5279AA 的回复:
代码就不帮这些写了,提供一个工具类吧。
 /** 
     * 将存放在sourceFilePath目录下的源文件,打包成fileName名称的ZIP文件,并存放到zipFilePath。 
     * @param sourceFilePath 待压缩的文件路径 
     * @param zipFilePath    压缩后存放路径 
     * @param fileName       压缩后文件的名称 
     * @return flag 
     */  
    public static boolean fileToZip(String sourceFilePath,String zipFilePath,String fileName) {  
        boolean flag = false;  
        File sourceFile = new File(sourceFilePath);  
        FileInputStream fis = null;  
        BufferedInputStream bis = 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()) {  
                    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);  
                        zos = new ZipOutputStream(new BufferedOutputStream(fos));  
                        byte[] bufs = new byte[1024*10];  
                        for(int i=0;i<sourceFiles.length;i++) {  
                            // 创建ZIP实体,并添加进压缩包  
                            ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName());  
                            zos.putNextEntry(zipEntry);  
                            // 读取待压缩的文件并写进压缩包里  
                            fis = new FileInputStream(sourceFiles[i]);  
                            bis = new BufferedInputStream(fis,1024*10);  
                            int read = 0;  
                            while((read=bis.read(bufs, 0, 1024*10)) != -1) {  
                                zos.write(bufs, 0, read);  
                            }  
                        }  
                        flag = true;  
                    }  
                }  
            } catch (FileNotFoundException e) {  
                e.printStackTrace();  
                throw new RuntimeException(e);  
            } catch (IOException e) {  
                e.printStackTrace();  
                throw new RuntimeException(e);  
            } finally {  
                // 关闭流  
                try {  
                    if(null != bis) bis.close();  
                    if(null != zos) zos.close();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                    throw new RuntimeException(e);  
                }  
            }  
        }  
          
        return flag;  
    }
压缩我倒是会,我是说分包啊,比如压缩成16M的话就会生成4个包,前3个5M,最后一个1M。然后还要将这四个包解压成最开始的文件夹
失落夏天 2013-10-14
  • 打赏
  • 举报
回复
代码就不帮这些写了,提供一个工具类吧。
 /** 
     * 将存放在sourceFilePath目录下的源文件,打包成fileName名称的ZIP文件,并存放到zipFilePath。 
     * @param sourceFilePath 待压缩的文件路径 
     * @param zipFilePath    压缩后存放路径 
     * @param fileName       压缩后文件的名称 
     * @return flag 
     */  
    public static boolean fileToZip(String sourceFilePath,String zipFilePath,String fileName) {  
        boolean flag = false;  
        File sourceFile = new File(sourceFilePath);  
        FileInputStream fis = null;  
        BufferedInputStream bis = 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()) {  
                    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);  
                        zos = new ZipOutputStream(new BufferedOutputStream(fos));  
                        byte[] bufs = new byte[1024*10];  
                        for(int i=0;i<sourceFiles.length;i++) {  
                            // 创建ZIP实体,并添加进压缩包  
                            ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName());  
                            zos.putNextEntry(zipEntry);  
                            // 读取待压缩的文件并写进压缩包里  
                            fis = new FileInputStream(sourceFiles[i]);  
                            bis = new BufferedInputStream(fis,1024*10);  
                            int read = 0;  
                            while((read=bis.read(bufs, 0, 1024*10)) != -1) {  
                                zos.write(bufs, 0, read);  
                            }  
                        }  
                        flag = true;  
                    }  
                }  
            } catch (FileNotFoundException e) {  
                e.printStackTrace();  
                throw new RuntimeException(e);  
            } catch (IOException e) {  
                e.printStackTrace();  
                throw new RuntimeException(e);  
            } finally {  
                // 关闭流  
                try {  
                    if(null != bis) bis.close();  
                    if(null != zos) zos.close();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                    throw new RuntimeException(e);  
                }  
            }  
        }  
          
        return flag;  
    }
teemai 2013-10-14
  • 打赏
  • 举报
回复
思路都很清晰,只不过就是几个if 判断。

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧