精华内容
下载资源
问答
  • 主要介绍了Java实现自动压缩文件加密的方法,涉及java针对文件进行zip压缩并加密的相关操作技巧,需要的朋友可以参考下
  • 实现功能:自动压缩并加密 /** * * @Title: zipFilesAndEncrypt * @Description: 将指定路径下的文件压缩至指定zip文件,... * @param srcFileName 待压缩文件路径 * @param zipFileName zip文件名 ...

    实现功能:自动压缩并加密

     

     /** 
        *  
        * @Title: zipFilesAndEncrypt 
        * @Description: 将指定路径下的文件压缩至指定zip文件,并以指定密码加密,若密码为空,则不进行加密保护 
        * @param srcFileName 待压缩文件路径 
        * @param zipFileName zip文件名 
        * @param password 加密密码  
        * @return 
        * @throws Exception  
        */  
        public void zipFilesAndEncrypt(String srcFileName,String zipFileName,String password) throws Exception{  
        	
        	ZipOutputStream outputStream=null;
    	    System.out.println("进入测试类");
    	    if(StringUtils.isEmpty(srcFileName) || StringUtils.isEmpty(zipFileName)){  
    	    	log.error("请求的压缩路径或者文件名有误");
    	    	return;
    	    }  
    	    try {  
    		    ZipParameters parameters = new ZipParameters();  
    		    parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);  
    		    parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);  
    		    if(!StringUtils.isEmpty(password)){  
    		    	parameters.setEncryptFiles(true);   
    			    parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);  
    			    parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);  
    			    parameters.setPassword(password);  
    		    }  
    		    ArrayList<File> filesToAdd = new ArrayList<File>();
    		    File file=new File(srcFileName);
    		    File[] files = new File[0]; 
    		    if(file.isDirectory())
    		    {
    		    	files = file.listFiles();
    		    	for(int i=0;i<files.length;i++){
    		    	filesToAdd.add(new File(srcFileName+files[i].getName()));
    		    	System.out.println("文件名称:"+files[i].getName());
    		    	}
    		    }
    		    else {
    				filesToAdd.add(new File(srcFileName+file.getName()));
    			}
    		    ZipFile zipFile = new ZipFile(srcFileName+zipFileName+".zip");  
    		    zipFile.addFiles(filesToAdd, parameters); 
    	    } 
    	    catch (Exception e) {  
    	    	System.out.println("文件压缩出错");
    	    	log.error("文件压缩出错", e);  
    	    throw e;  
    	    } 
    	}/** 
        *  
        * @Title: zipFilesAndEncrypt 
        * @Description: 将指定路径下的文件压缩至指定zip文件,并以指定密码加密,若密码为空,则不进行加密保护 
        * @param srcFileName 待压缩文件路径 
        * @param zipFileName zip文件名 
        * @param password 加密密码  
        * @return 
        * @throws Exception  
        */  
        public void zipFilesAndEncrypt(String srcFileName,String zipFileName,String password) throws Exception{  
        	
        	ZipOutputStream outputStream=null;
    	    System.out.println("进入测试类");
    	    if(StringUtils.isEmpty(srcFileName) || StringUtils.isEmpty(zipFileName)){  
    	    	log.error("请求的压缩路径或者文件名有误");
    	    	return;
    	    }  
    	    try {  
    		    ZipParameters parameters = new ZipParameters();  
    		    parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);  
    		    parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);  
    		    if(!StringUtils.isEmpty(password)){  
    		    	parameters.setEncryptFiles(true);   
    			    parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);  
    			    parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);  
    			    parameters.setPassword(password);  
    		    }  
    		    ArrayList<File> filesToAdd = new ArrayList<File>();
    		    File file=new File(srcFileName);
    		    File[] files = new File[0]; 
    		    if(file.isDirectory())
    		    {
    		    	files = file.listFiles();
    		    	for(int i=0;i<files.length;i++){
    		    	filesToAdd.add(new File(srcFileName+files[i].getName()));
    		    	System.out.println("文件名称:"+files[i].getName());
    		    	}
    		    }
    		    else {
    				filesToAdd.add(new File(srcFileName+file.getName()));
    			}
    		    ZipFile zipFile = new ZipFile(srcFileName+zipFileName+".zip");  
    		    zipFile.addFiles(filesToAdd, parameters); 
    	    } 
    	    catch (Exception e) {  
    	    	System.out.println("文件压缩出错");
    	    	log.error("文件压缩出错", e);  
    	    throw e;  
    	    } 
    	}

     

     

     

     

     

    展开全文
  • 这是个window shell工具右键自动加密压缩上传邮箱工具 邮箱协议暂时只支持helo. 先运行install.bat,注册插件,然后选择一个或者多个文件或文件夹,右键,弹出选项,在上面选择编辑,把邮箱,用户名密码设置好。...
  • 3.压缩文件夹及其下文件为rar 还是 zip 4.解压缩 5.加密压缩及解加密压缩 ———– 示例代码如下: protected void Button1_Click(object sender, EventArgs e) { string strtxtPath = C://freezip//free.txt; ...
  • 同时由于SQL Server自动备份的bak文件通常都比较大,如果直接传到本地,要花比较久的时间,因此为了提高效率最好在备份后先压缩,并且为了安全起见,下载下来的文件还要加密。那么有没有可能让SQL自动备份

    作为程序员或者数据库维护人员,可能大家经常 要做的事情就是备份数据库,并且为了安全起见最好是异地备份,但是如果要经常备份,然后把他们传到本地,是一件非常费时费力的事情,尤其像我这种比较懒的程序员,甚至有时候会忘记备份^_^,所以比较好的解决办法就是让SQL Server自动备份,同时自动下载。同时由于SQL Server自动备份的bak文件通常都比较大,如果直接传到本地,要花比较久的时间,因此为了提高效率最好在备份后先压缩,并且为了安全起见,下载下来的文件还要加密。那么有没有可能让SQL自动备份,加密压缩,自动下载的所有流程都自动完成呢,答案是肯定的。下面我就将我使用到的工具、方法和代码共享出来,供大家参考。
            第一个步骤就是让SQL Server自动备份数据库,这方面的文章比较多,最常用的是使用SQL Server的代理,定时执行一个“作业”。基本步骤就是先编写一个执行备份的存储过程,然后在SQL Server的企业管理器中,选择“管理——>SQL Server代理——>新建作业”,然后在新建作业步骤中类型选择Transact-SQL,再在命令中输入执行备份的存储过程(或者开始不建立存储过程,在这里直接输入备份的SQL代码也可)就可以了。
         第二个步骤就是加密并压缩备份的数据库文件。我自己试了一下,一个200M的SQL 备份文件,用WinRAR压缩之后的大小是18M左右,所以为了快速传到本地,压缩是非常有必要的。为了在备份后,马上进行压缩,最方便的就是直接使用SQL命令执行压缩,由于WinRAR可以通过命令行调用,所以我们可以使用SQL Server中的xp_cmdshell命令来执行压缩指令,同时通过其中的一些参数指定压缩密码,这样加密压缩就实现了。(为了实现此功能,服务器上要安装WinRAR)
          最后还需要定时自动下载。要实现这个功能可以使用windows的任务计划,再结合系统自带的ftp命令即可实现。
     
    下面给出实现此功能的完整步骤和代码:
     
    服务器端:
     
    1、 在要备份的数据库中建立存储过程:
     
    CREATE PROCEDURE [do_backup] AS
    declare
    @prefix nvarchar(100),
    @datefile nvarchar(100),
    @bakfile nvarchar(100),
    @rarfile nvarchar(100),
    @delcmd nvarchar(100),
    @rarcmd nvarchar(150)
    set @prefix='E:/Bak/databasename/' --备份文件夹
    set @datefile='fzjs'+cast(Year(GetDate()) as varchar(4))+cast(Month(GetDate()) as varchar(2))+cast(Day(GetDate()) as varchar(2))
    set @bakfile=@prefix+@datefile+'.bak'
    set @rarfile=@prefix+'RAR/'+@datefile+'.rar'
    BACKUP DataBASE databasename2 TO DISK = @bakfile WITH INIT , NOUNLOAD , NAME = N'databasename数据备份', NOSKIP , STATS = 10, NOFORMAT
    set @delcmd = 'del '+@prefix+ 'RAR/*.rar'   --先清空RAR备份文件夹
    set @rarcmd ='C:/Progra~1/WinRAR/WinRAR.exe a -pyourpw '+@rarfile+' '+@bakfile --将yourpw改为您要设置的密码,进行加密压缩
    exec master..xp_cmdshell @delcmd
    exec master..xp_cmdshell @rarcmd
    GO
    2、 数据库管理器——管理——>作业——>新建作业——设置作业的执行程序和运行时间,根据自己的备份需要进行设置,然后启用作业。
    3、 在服务器的FTP中将数据压缩备份的目录设置好。
    4、 在本地建立一个ftp命令的文本文件:c:/ftp.txt
    文件中输入以下内容(替换成您自己的内容并去掉[]):
    open [您的服务器IP地址]
    [数据库备份压缩目录FTP登录用户名]
    [数据库备份压缩目录FTP登录密码]
    verbose off
    lcd [本地保存路径]
    prompt off
    mget *.rar
    bye
    5、 然后建立一个autoftp.bat的批处理文件,执行ftp命令。
    ftp -s:c:/ftp.txt
    6、 在控件面板的任务计划管理中,添加批处理文件的定时自动运行时间,并注意要与服务器数据库备份时间相衔接。
    这样,调试成功以后,整个过程就大功告成了,以后就不用去经常去做这些繁琐的事情啦!

    文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/7_databases/sql/sqlServer/2008531/118440.html

    展开全文
  • * 如果已经存在同名文件则出现一个文件的时候出现一个问题,程序生成一个临时包并去修改之前存在的同名压缩文件,最后修改不成功且抛出异常: ZipException: cannot rename modified zip file 最后只留下一...

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   

    最近公司准备让各项目组提供公共工具组件,手中正好无事便研究其中一个工具 - 文件压缩与解压缩工具。

              目前JAVA API已提供对于ZIP文件的压缩与解压缩,但网上总结不支持ZIP文件加密与解密甚至对于中文支持也有问题,于是果断找其他的支持加密解密的第三方包。 winzipaes 与 ZIP4J 都符合项目的要求 ,最终选择ZIP4J来进行使用。

    • ZIP4J 是一个支持处理ZIP文件的开源库
    • 支持创建,修改,添加,删除,解压 压缩文件
    • 支持读/写密码保护
    • 支持AES加密 128/256
    • 支持标准ZIP加密
    • 支持进度监视器
    • 自持Unicode 文件名
    • 支持创建分卷压缩文件
    • 支持将文件添加到压缩包中但不进行压缩


    ZIP4J 项目地址为  :http://www.lingala.net/zip4j/ ,但该地址无法直接访问需要使用代理进行访问

    再提供一个在线代理网站:http://www.7daili.com/

    目前ZIP4J 版本为:1.3.1 ,只需要直接下一载一个zip4j_1.3.1.jar一个jar包即可,同时可以下载官网提供的例子进行学习,例子相当详细(官网提供的例子的jdk 为1.4的版本 导入后需要修改一下)




    官网提供的例子程序比较简单与小巧 整个程序也就一百多k,但demo程序对于各种功能的使用讲的非常详细。

    项目包结构分为三层:

    • ZIP:该包下主要讲述压缩包的新增,修改,删除等例子(包含加密文件创建,通过流的方式创建 、添加压缩文件 、创建分卷压缩文件);
    • MISC:该包下主要展示几个工具方法例子,如:是否是分卷压缩包的判断、获取压缩包中的文件信息(文件名 大小等信息)、压缩进度查看、根据文件名删除压缩包对应文件等;
    • EXTRACT:该包下例子都是关于解压压缩包的例子,包括解压加密文件等;


    示例代码

    示例代码中需要对文件进行操作,为方便程序运行创建以下三个文件 可以直接运行大多数代码

    1. sample.txt
    2. myvideo.avi
    3. mysong.mp3


    示例1 创建压缩包添 加文件到压缩包中(未设置加密)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    public class AddFilesDeflateComp {
          
        publicAddFilesDeflateComp() {
            try{
                  
                ZipFile zipFile =new ZipFile("c:\\ZipTest\\AddFilesDeflateComp.zip");
                  
                ArrayList<File> filesToAdd =new ArrayList<File>();
                filesToAdd.add(newFile("c:\\ZipTest\\sample.txt"));
                filesToAdd.add(newFile("c:\\ZipTest\\myvideo.avi"));
                filesToAdd.add(newFile("c:\\ZipTest\\mysong.mp3"));
                  
                ZipParameters parameters =new ZipParameters();
                parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);// set compression method to deflate compression            parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); 
                zipFile.addFiles(filesToAdd, parameters);
                  
            }catch (ZipException e) {
                e.printStackTrace();
            }   
        }
          
        /**
         * @param args
         */
        publicstatic void main(String[] args) {
            newAddFilesDeflateComp();
        }
      
    }
    • 该类主要用于创建普通压缩包。如果压缩包不存在 则会自动创建一个ZIP包;如果已经存在一个不为空的同名ZIP压缩包 会将内容添加到该同名压缩包中。
    • 如果手动创建一个格式为ZIP的空压缩包进行保存,则为抛出异常:ZipException :Negative seek offset
    • 如果将其他的文件后缀修改为ZIP包再运行程序,也会抛出异常:ZipException: zip headers not found. probably not a zip file
    • ZIP4J 提供ZipParameters对象来进行压缩参数设置,其中setCompressionMethod方法可以设置压缩还是 不压缩


    示例2 创建压缩包添加文件到 指定目录中进行压缩

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public class AddFilesToFolderInZip {
      
        publicAddFilesToFolderInZip() {
            try{
                ZipFile zipFile =new ZipFile("c:\\ZipTest\\AddFilesDeflateComp.zip");
                ArrayList<File> filesToAdd =new ArrayList<File>();
                filesToAdd.add(newFile("c:\\ZipTest\\sample.txt"));
                filesToAdd.add(newFile("c:\\ZipTest\\myvideo.avi"));
                filesToAdd.add(newFile("c:\\ZipTest\\mysong.mp3"));
                  
                ZipParameters parameters =new ZipParameters();
                parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
                  
                parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
                parameters.setRootFolderInZip("test2/");
                  
      
                zipFile.addFiles(filesToAdd, parameters);
            }catch (ZipException e) {
                e.printStackTrace();
            
              
              
        }
          
        /**
         * @param args
         */
        publicstatic void main(String[] args) {
            newAddFilesToFolderInZip();
        }
      
    }


    • 该程序执行后,会将sample.txt、myvideo.avi、mysong.mp3 添加到test2文件夹中 并生成AddFilesDeflateComp.zip 压缩包
    • 如果已经存在AddFilesDeflateComp.zip,则会将需要打包的内容添加到已经存在的压缩包去


    示例3 添加文件夹到压缩包中

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public class AddFolder {
          
        publicAddFolder() {
              
            try{
                  
                ZipFile zipFile =new ZipFile("c:\\ZipTest\\AddFolder.zip");
                String folderToAdd ="c:\\FolderToAdd";
              
                ZipParameters parameters =new ZipParameters();
                  
                parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
                parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
                zipFile.addFolder(folderToAdd, parameters);
                  
            }catch (ZipException e) {
                e.printStackTrace();
            }
        }
          
        publicstatic void main(String[] args) {
            newAddFolder();
        }
          
    }
    • 需要添加的文件夹必须存在,否则抛出异常:ZipException: input folder does not exist
    • * 如果已经存在同名文件则会出现一个文件的时候会出现一个问题,程序会生成一个临时包并去修改之前存在的同名压缩文件,最后修改不成功且会抛出异常:ZipException: cannot rename modified zip file最后只留下一个临时包, 建议在生成的时候添加判断 避免出现这种错误

        

    示例4 创建加密压缩包

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public class AddFilesWithAESEncryption {
          
        publicAddFilesWithAESEncryption() {
              
            try{
                ZipFile zipFile =new ZipFile("c:\\ZipTest\\AddFilesWithAESZipEncryption.zip");
      
                ArrayList<File> filesToAdd =new ArrayList<File>();
                filesToAdd.add(newFile("c:\\ZipTest\\sample.txt"));
                filesToAdd.add(newFile("c:\\ZipTest\\myvideo.avi"));
                filesToAdd.add(newFile("c:\\ZipTest\\mysong.mp3"));
                  
                ZipParameters parameters =new ZipParameters();
                parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
                  
                parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); 
                parameters.setEncryptFiles(true);
                  
                parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
                  
      
                parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
                parameters.setPassword("123");
          
                zipFile.addFiles(filesToAdd, parameters);
            }catch (ZipException e) {
                e.printStackTrace();
            }
        }
          
        publicstatic void main(String[] args) {
            newAddFilesWithAESEncryption();
        }
          
    }

    加密压缩包后打开时需要输入密码,与rar相同:



    示例5 创建分卷压缩包

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public class CreateSplitZipFile {
          
        publicCreateSplitZipFile() {
              
            try{
              
                ZipFile zipFile =new ZipFile("c:\\ZipTest\\CreateSplitZipFile.zip");
                  
      
                ArrayList<File> filesToAdd =new ArrayList<File>();
                filesToAdd.add(newFile("c:\\ZipTest\\sample.txt"));
                filesToAdd.add(newFile("c:\\ZipTest\\myvideo.avi"));
                filesToAdd.add(newFile("c:\\ZipTest\\mysong.mp3"));
                  
                ZipParameters parameters =new ZipParameters();
                parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
                  
                parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
                  
                zipFile.createZipFile(filesToAdd, parameters,true, 65536);
            }catch (ZipException e) {
                e.printStackTrace();
            }
        }
          
        /**
         * @param args
         */
        publicstatic void main(String[] args) {
            newCreateSplitZipFile();
        }
      
    }
    • 执行程序后会根据设置大小生成多个  压缩包名.z + 数量编号文件,如下图:
    • 如果已经存在同名压缩包,则会抛出异常提示已经存在:ZipException: zip file: c:\ZipTest\CreateSplitZipFile.zip already exists. To add files to existing zip file use addFile method
    • 需要进行分卷压缩的大小,不能小于规定的65536 bytes


    示例6 通过流的方式添加文件到压缩包中

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    展开全文
  •  目前JAVA API已提供对于ZIP文件压缩与解压缩,但网上总结不支持ZIP文件加密与解密甚至对于中文支持也有问题,于是果断找其他的支持加密解密的第三方包。 winzipaes 与 ZIP4J 都符合项目的要求 ,最终选择ZIP4J...

    最近公司准备让各项目组提供公共工具组件,手中正好无事便研究其中一个工具 - 文件压缩与解压缩工具。

              目前JAVA API已提供对于ZIP文件的压缩与解压缩,但网上总结不支持ZIP文件加密与解密甚至对于中文支持也有问题,于是果断找其他的支持加密解密的第三方包。 winzipaes 与 ZIP4J 都符合项目的要求 ,最终选择ZIP4J来进行使用。

    • ZIP4J 是一个支持处理ZIP文件的开源库
    • 支持创建,修改,添加,删除,解压 压缩文件
    • 支持读/写密码保护
    • 支持AES加密 128/256
    • 支持标准ZIP加密
    • 支持进度监视器
    • 自持Unicode 文件名
    • 支持创建分卷压缩文件
    • 支持将文件添加到压缩包中但不进行压缩


    ZIP4J 项目地址为  :http://www.lingala.net/zip4j/ ,但该地址无法直接访问需要使用代理进行访问

    再提供一个在线代理网站:http://www.7daili.com/

    目前ZIP4J 版本为:1.3.1 ,只需要直接下一载一个zip4j_1.3.1.jar一个jar包即可,同时可以下载官网提供的例子进行学习,例子相当详细(官网提供的例子的jdk 为1.4的版本 导入后需要修改一下)




    官网提供的例子程序比较简单与小巧 整个程序也就一百多k,但demo程序对于各种功能的使用讲的非常详细。

    项目包结构分为三层:

    • ZIP:该包下主要讲述压缩包的新增,修改,删除等例子(包含加密文件创建,通过流的方式创建 、添加压缩文件 、创建分卷压缩文件);
    • MISC:该包下主要展示几个工具方法例子,如:是否是分卷压缩包的判断、获取压缩包中的文件信息(文件名 大小等信息)、压缩进度查看、根据文件名删除压缩包对应文件等;
    • EXTRACT:该包下例子都是关于解压压缩包的例子,包括解压加密文件等;


    示例代码

    示例代码中需要对文件进行操作,为方便程序运行创建以下三个文件 可以直接运行大多数代码

    1. sample.txt
    2. myvideo.avi
    3. mysong.mp3


    示例1 创建压缩包添 加文件到压缩包中(未设置加密)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    public class AddFilesDeflateComp {
          
        public AddFilesDeflateComp() {
            try {
                  
                ZipFile zipFile = new ZipFile("c:\\ZipTest\\AddFilesDeflateComp.zip");
                  
                ArrayList<File> filesToAdd = new ArrayList<File>();
                filesToAdd.add(new File("c:\\ZipTest\\sample.txt"));
                filesToAdd.add(new File("c:\\ZipTest\\myvideo.avi"));
                filesToAdd.add(new File("c:\\ZipTest\\mysong.mp3"));
                  
                ZipParameters parameters = new ZipParameters();
                parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); // set compression method to deflate compression             parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); 
                zipFile.addFiles(filesToAdd, parameters);
                  
            } catch (ZipException e) {
                e.printStackTrace();
            }   
        }
          
        /**
         * @param args
         */
        public static void main(String[] args) {
            new AddFilesDeflateComp();
        }
      
    }
    • 该类主要用于创建普通压缩包。如果压缩包不存在 则会自动创建一个ZIP包;如果已经存在一个不为空的同名ZIP压缩包 会将内容添加到该同名压缩包中。
    • 如果手动创建一个格式为ZIP的空压缩包进行保存,则为抛出异常:ZipException :Negative seek offset
    • 如果将其他的文件后缀修改为ZIP包再运行程序,也会抛出异常:ZipException: zip headers not found. probably not a zip file
    • ZIP4J 提供ZipParameters对象来进行压缩参数设置,其中setCompressionMethod方法可以设置压缩还是 不压缩


    示例2 创建压缩包添加文件到 指定目录中进行压缩

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public class AddFilesToFolderInZip {
      
        public AddFilesToFolderInZip() {
            try {
                ZipFile zipFile = new ZipFile("c:\\ZipTest\\AddFilesDeflateComp.zip");
                ArrayList<File> filesToAdd = new ArrayList<File>();
                filesToAdd.add(new File("c:\\ZipTest\\sample.txt"));
                filesToAdd.add(new File("c:\\ZipTest\\myvideo.avi"));
                filesToAdd.add(new File("c:\\ZipTest\\mysong.mp3"));
                  
                ZipParameters parameters = new ZipParameters();
                parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
                  
                parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
                parameters.setRootFolderInZip("test2/");
                  
      
                zipFile.addFiles(filesToAdd, parameters);
            } catch (ZipException e) {
                e.printStackTrace();
            
              
              
        }
          
        /**
         * @param args
         */
        public static void main(String[] args) {
            new AddFilesToFolderInZip();
        }
      
    }


    • 该程序执行后,会将sample.txt、myvideo.avi、mysong.mp3 添加到test2文件夹中 并生成AddFilesDeflateComp.zip 压缩包
    • 如果已经存在AddFilesDeflateComp.zip,则会将需要打包的内容添加到已经存在的压缩包去


    示例3 添加文件夹到压缩包中

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public class AddFolder {
          
        public AddFolder() {
              
            try {
                  
                ZipFile zipFile = new ZipFile("c:\\ZipTest\\AddFolder.zip");
                String folderToAdd = "c:\\FolderToAdd";
              
                ZipParameters parameters = new ZipParameters();
                  
                parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
                parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
                zipFile.addFolder(folderToAdd, parameters);
                  
            } catch (ZipException e) {
                e.printStackTrace();
            }
        }
          
        public static void main(String[] args) {
            new AddFolder();
        }
          
    }
    • 需要添加的文件夹必须存在,否则抛出异常:ZipException: input folder does not exist
    • * 如果已经存在同名文件则会出现一个文件的时候会出现一个问题,程序会生成一个临时包并去修改之前存在的同名压缩文件,最后修改不成功且会抛出异常:ZipException: cannot rename modified zip file最后只留下一个临时包, 建议在生成的时候添加判断 避免出现这种错误

        

    示例4 创建加密压缩包

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public class AddFilesWithAESEncryption {
          
        public AddFilesWithAESEncryption() {
              
            try {
                ZipFile zipFile = new ZipFile("c:\\ZipTest\\AddFilesWithAESZipEncryption.zip");
      
                ArrayList<File> filesToAdd = new ArrayList<File>();
                filesToAdd.add(new File("c:\\ZipTest\\sample.txt"));
                filesToAdd.add(new File("c:\\ZipTest\\myvideo.avi"));
                filesToAdd.add(new File("c:\\ZipTest\\mysong.mp3"));
                  
                ZipParameters parameters = new ZipParameters();
                parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
                  
                parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); 
                parameters.setEncryptFiles(true);
                  
                parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
                  
      
                parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
                parameters.setPassword("123");
          
                zipFile.addFiles(filesToAdd, parameters);
            } catch (ZipException e) {
                e.printStackTrace();
            }
        }
          
        public static void main(String[] args) {
            new AddFilesWithAESEncryption();
        }
          
    }

    加密压缩包后打开时需要输入密码,与rar相同:



    示例5 创建分卷压缩包

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public class CreateSplitZipFile {
          
        public CreateSplitZipFile() {
              
            try {
              
                ZipFile zipFile = new ZipFile("c:\\ZipTest\\CreateSplitZipFile.zip");
                  
      
                ArrayList<File> filesToAdd = new ArrayList<File>();
                filesToAdd.add(new File("c:\\ZipTest\\sample.txt"));
                filesToAdd.add(new File("c:\\ZipTest\\myvideo.avi"));
                filesToAdd.add(new File("c:\\ZipTest\\mysong.mp3"));
                  
                ZipParameters parameters = new ZipParameters();
                parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
                  
                parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
                  
                zipFile.createZipFile(filesToAdd, parameters, true, 65536);
            } catch (ZipException e) {
                e.printStackTrace();
            }
        }
          
        /**
         * @param args
         */
        public static void main(String[] args) {
            new CreateSplitZipFile();
        }
      
    }
    • 执行程序后会根据设置大小生成多个  压缩包名.z + 数量编号文件,如下图:
    • 如果已经存在同名压缩包,则会抛出异常提示已经存在:ZipException: zip file: c:\ZipTest\CreateSplitZipFile.zip already exists. To add files to existing zip file use addFile method
    • 需要进行分卷压缩的大小,不能小于规定的65536 bytes


    示例6 通过流的方式添加文件到压缩包中

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    public class AddStreamToZip {
          
        public AddStreamToZip() {
              
            InputStream is = null;
              
            try {
                ZipFile zipFile = new ZipFile("c:\\ZipTest\\AddStreamToZip.zip");
      
                ZipParameters parameters = new ZipParameters();
                parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
                parameters.setFileNameInZip("yourfilename.txt");
                parameters.setSourceExternalStream(true);
                  
                is = new FileInputStream("c:\\ZipTest\\sample.txt");
                zipFile.addStream(is, parameters);
                  
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (is != null) {
                    try {
                        is.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
          
        public static void main(String[] args) {
            new AddStreamToZip();
              
        }
          
          
    }


    示例7 解压压缩文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class ExtractAllFiles {
          
        public ExtractAllFiles() {
              
            try {
                ZipFile zipFile = new ZipFile("c:\\ZipTest\\ProgressInformation.zip");
                zipFile.extractAll("c:\\ZipTest1");
                  
            } catch (ZipException e) {
                e.printStackTrace();
            }
              
        }
      
        /**
         * @param args
         */
        public static void main(String[] args) {
            new ExtractAllFiles();
        }
      
    }
    • 如果解压的文件需要密码,可以添加以下代码:
    • 1
      2
      3
      4
      if (zipFile.isEncrypted()) {
                      // if yes, then set the password for the zip file                 zipFile.setPassword("test123!");
                  }

    • 在进行解压缩时需要判断文件是否为加密压缩,否则会抛出异常:ZipException: empty or null password provided for AES Decryptor

    压缩效率

       ZIP4J提供5中压缩算法:

    1.     DEFLATE_LEVEL_FASTEST 
    2.     DEFLATE_LEVEL_FASTEST
    3.     DEFLATE_LEVEL_NORMAL
    4.     DEFLATE_LEVEL_MAXIMUM
    5.     DEFLATE_LEVEL_ULTRA

       根据API提供的几种不同压缩级别进行测试(文件夹压缩),测试结果如下:

       一个180M的文件夹压缩后

    •    WinRAR 30秒 - 78.7 MB ; 
    •    NORMAL - 18 秒 91.2 MB  ;
    •    FAST 13秒 -93.1 MB;
    •    FASTEST - 最快速10 秒94.7 MB 
    •    MAXIMUM 23 秒 - 90.7 MB;
    •    ULTRA -50 90.6 MB

        与WinRAR 相比较来说,压缩时间还是很不错 但对文件的压缩大小来说还是WINRAR要强一些 (各人电脑配置不同 压缩的时间这些也不同)


         以上便是ZIP4J提供的一些常用的工具方法,总结在此,方便自己与大家使用。如果有更好的工具或者有不正确的地方欢迎大家指出!


    展开全文
  • Python 创建加密压缩文件

    千次阅读 2019-11-05 00:14:16
    Python 创建加密压缩文件 1. 配置ZLib http://www.winimage.com/zLibDll/minizip.html 下载之后将 zlibwapi.dll 放在 demo/目录下,与 minizip.exe 一起使用 2. 命令行使用 minizip.exe >minizip.exe ...
  • DELPHI 文件压缩加密

    千次阅读 2009-12-16 16:58:00
    1、 系统功能 1)、数据压缩 使用DELPHI提供的两个流类(TCompressionStream和TDecompressionStream)来完成数据的压缩和解压缩。...其中数据压缩部分采用1)的实现方法 3)、双击压缩文件自动关联
  • WinZip是目前最常用的压缩/解压缩工具软件之一,由于其压缩效率高、速度快、安全可靠,无论是数据资料...那么WINZIP压缩文件怎么加密? (1)打开或者新建一个压缩文件包 点击“NEW”(新建)按钮新建一个压缩文...
  • python 批量加密压缩文件

    千次阅读 2020-03-25 23:01:23
    python 批量加密压缩文件0x01 解决的问题0x02 遇到的问题0x03 代码 0x01 解决的问题 当有大批的文件,并且存放在不同的文件夹中,需要你进行加密压缩时,可参照此代码; 在代码中,由于个人需要,提取了各个文件的...
  • DELPHI 文件压缩加密

    千次阅读 2012-08-08 11:49:02
    1、 系统功能  ...2)、数据加密压缩  通过Delphi编程中“流”的应用实现数据加密,主要采用Tstream的两个派生类Tfilestream、Tmemorystream 来完成的;其中数据压缩部分采用1)的实现方法  3)、双
  • SQL SERVER 定时自动备份,并将备份文件加密压缩(2008-11-12 11:21:48)标签:it 分类:操作系统@数据库 最近因为公司要升级HR系统,我被安排管理这个项目,公司为了安全起见和我签署了保密协议,按了手印责任就大了...
  • const zip = archiver('zip-encrypted', { zlib: {level: 9}, encryptionMethod: 'zip20', // 支持 sha256, zip20, adm-zip解压不支持 sha256 password: '123456', // 加密密码 }); zip.pipe(output); zip.file('./...
  • 一键自动发布ipa(更新svn,拷贝资源,压缩资源,加密图片资源,加密数据文件加密lua脚本,编译代码,ipa签名,上传ftp) 程序员的生活要一切自动化,更要幸福^_^。   转载请注明出处...
  • 并且为了安全起见最好是异地备份,但是如果要经常备份,然后把他们传到本地,是一件非常费时费力的事情,尤其像我这种比较懒的程序员,甚至有时候忘记备份^_^,所以比较好的解决办法就是让SQL Server自动备份,...
  • 使用tar命令进行加密压缩时需要和OpenSSL进行结合 加密压缩命令如下: tar -zcf - filename |openssl des3 -salt -k passwd | dd of=filename.des3 filename 你要打包的文件、或目录名 -k 可以不使用 -k...
  • WinRAR自动文件加密

    2008-03-23 23:06:00
    我们可以通过简单的设置,在每次压缩文件的时候让压缩软件自动对其进行加密。 运行WinRAR后,选择菜单栏中的“选项→设置”,在“设置”窗口中选择“压缩选项 ”,点击上面的“创建默认配置”按钮。在随后打开的窗口...
  • linux下zip加密压缩文件

    千次阅读 2016-11-12 22:38:56
    zip -q -r -P password zipfile.zip sourcefiles.txt...zipfile.zip 是生成的压缩文件 sourcefiles.txt 是被压缩的文件   zip [参数]   使用zip格式打包文件  -r 递归,将指定目录下的所有文件和子目录一并
  • 作者 : wnhoo ...标题 : 用DELPHI实现文件加密压缩 关键字: 加密压缩、Zlib、流、资源文件 分类 : 开发经验 密级 : 参赛   (评分:★★★★ , 回复: 17, 阅读: 4837)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 71,883
精华内容 28,753
关键字:

为什么压缩文件会自动加密