`
lvjun106
  • 浏览: 436178 次
  • 性别: Icon_minigender_1
  • 来自: 芜湖
社区版块
存档分类
最新评论

JAVA,导出CSV,设最大行数限制,使用winzipaes压缩成带密码的zip文件

    博客分类:
  • JAVA
 
阅读更多

[转:http://blog.csdn.net/lian_zhihui1984/article/details/6893119]

由于工作需要,导出CSV功能,太大的话要分成多个,并且导出文件要压缩成带密码的zip。

JAVA本身的ZIP输入输出流是支持多个文件的,但是没有设置密码功能。

网上搜索了很久,最后选择使用开源的winzipaes。

地址 http://code.google.com/p/winzipaes/

下载它的source,自己编译生成jar。在编译时,要用到bcprov-jdk jar包,到下面的网页里下载。

目前的winzipaes_src_20110911.zip,官网推荐使用bcprov-jdk15-146.jar

http://www.bouncycastle.org/latest_releases.html

 

1. 使用示例(源码里的例子,没测试过)

压缩

 

[java] view plaincopy
 
  1. File inFile;  
  2. File outFile;  
  3. ...  
  4. AESEncrypter encrypter = new AESEncrypterBC();  
  5. AesZipFileEncrypter enc = new AesZipFileEncrypter(outFile,encrypter);  
  6. try {  
  7.     enc.add(inFile, password);  
  8. finally {  
  9.     enc.close();  
  10. }  

 

 

解压

 

[java] view plaincopy
 
  1. AesZipFileDecrypter zipFile = new AesZipFileDecrypter( new File("doc/zipSpecificationAes.zip"), new AESDecrypterBC() );  
  2. ExtZipEntry entry = zipFile.getEntry( "zipSpecification.txt" );  
  3. zipFile.extractEntryWithTmpFile( entry, new File("doc/zipSpecification.txt"), "foo" );  

 

 

2. 压缩多个文件时,有两个方法

(1) 预先把多个文件压缩成zip,使用enc.addAll(inZipFile, password);方法。

(2)循环调用enc.add(inFile, password);,每次用相同的密码

 

3. 压缩包里的path

使用add(File file, String password)方法,会把file的路径(绝对路径或相对路径,有创建file时决定)自动作为zip里的path。

不想要路径或者想自己指定的话,使用add(File file, String password)方法。

 

4. 不用inFile,通过流创建(省却创建临时文件,我就是用这个)

使用add(String name, InputStream is, String password)方法。

 

5. 我的导出CSV并带密码压缩代码(大体样子,不完全)

 

[java] view plaincopy
 
  1. List<DTO> dtoList = getData();  
  2. OutputStream out = null;  
  3. AesZipFileEncrypter enc = null;  
  4. byte[] bom ={(byte0xEF,(byte0xBB,(byte0xBF};  
  5. try {  
  6. out = response.getOutputStream();  
  7. enc = new AesZipFileEncrypter(out, new AESEncrypterBC());  
  8. int totalRowNum = dtoList.size();  
  9. int rowNum = 0;  
  10. final int MAX_ROW_NUM = 1000;  
  11. int fileNum = 0;  
  12. String csvData = "";  
  13.   
  14. for (DTO dto : dtoList)  {  
  15.     rowNum++;  
  16.   
  17.     // edit csv data  
  18.     ...  
  19.       
  20.     if  (rowNum  % MAX_ROW_NUM == 0  ||   
  21.          rowNum == totalRowNum)  {  
  22.         // excel打开UTF乱码的对应  
  23.         byte[] csvDataBytes = csvData.getBytes();  
  24.         byte[] outputDataBytes = new byte[csvDataBytes.length + bom.length];   
  25.         System.arraycopy(bom, 0, outputDataBytes , 0, bom.length);  
  26.         System.arraycopy(csvDataBytes , 0, outputDataBytes , bom.length, csvDataBytes .length);  
  27.   
  28.         DataInputStream dataInputStream = new DataInputStream(new ByteArrayInputStream(outputDataBytes ));  
  29.           
  30.         // 添加到zip         
  31.         enc.add((++fileNum) + ".csv", dataInputStream, “123456”);  
  32.           
  33.         if (rowNum < totalRowNum) {  
  34.             csvData = "";  
  35.         }  
  36.     }  
  37. }  
  38.   
  39. out.flush();  
  40. catch (IOException e) {  
  41.     e.printStackTrace();  
  42. finally {       
  43.     if (enc != null) {enc.close();}   
  44.     if (out != null) {out.close();}  
  45. }  



 

 

遗留问题(有时间研究一下代码看看有什么原因和解决方法):

1. 好像没有不设密码的方法

2. 压缩包里的文件名会出现乱码

 

分享到:
评论

相关推荐

    Java解压和压缩带密码的zip文件过程详解

    Java解压和压缩带密码...本文详细介绍了Java解压和压缩带密码的zip文件的过程,通过winzipaes开源项目和工具类,可以解决ZIP压缩文件的密码问题,并支持中文文件名。该文对大家的学习或者工作具有一定的参考学习价值。

    Java使用winzipaes对zip文件的操作,支持中文

    winzipaes是Java操作ZIP文件的开源项目,支持密码,但不支持中文文件名。此文件中包含修改后的源码、文档、jar包、依赖包及示例程序等文件。可以压缩文件名含有中文的文件,修改之处可以参看博客...

    java使用winzipaes打包必须包

    在Java中,可以使用`java.util.zip`包下的类,如`ZipOutputStream`和`ZipEntry`来创建和管理ZIP文件。 2. **WinZipAES库**:为了在Java程序中实现WinZipAES加密,你需要引入`winzipaes.jar`这个第三方库。这个库为...

    JAVA带密码的压缩.zip

    Java 个人练习Demo ,由于JDK自带的ZIP操作接口并不支持密码、中文文件名,这里使用了winzipaes开源项目作为解压,其支持带密码压缩和解压。源码、文档、jar包、依赖包及示例程序等文件。可以压缩文件名含有中文的...

    Java对zip文件的操作winzipaes源码,支持中文

    winzipaes是Java操作ZIP文件的开源项目,支持密码,但不支持中文文件名,此文件中是修改后的源码,可以压缩文件名含有中文的文件,修改之处可以参看博客http://xjlsgcjdtc.iteye.com/blog/1439514或者...

    winziaes.jar(winzipaes_src_20110222.zip)

    本文将聚焦于名为"winziaes.jar"的文件,该文件来源于"winzipaes_src_20110222.zip"压缩包,这是一款与WinZip AES加密技术相关的源代码库。我们将深入探讨WinZip AES加密技术的原理、应用以及其在源代码中的实现。 ...

    winzipaes.rar

    首先,ZIP是一种广泛使用的文件压缩格式,它允许用户将多个文件打包成一个单一的档案,以便于存储、传输或分发。然而,原始的ZIP格式并不支持高级加密,这可能成为数据保护的一个弱点。为了解决这个问题,WinZip AES...

    zip压缩算法原理与实现

    1. **创建ZIP文件**:在创建ZIP文件时,程序会遍历所有要压缩的文件,对每个文件应用DEFLATE或其他支持的压缩算法,然后将压缩后的数据和元数据写入ZIP存档。 2. **解压ZIP文件**:解压ZIP文件时,读取存档中的每个...

    winzipaes的java对文件加密和解密的方法以及中文文件的支持,亲测可用

    winzipaes支持的java springboot的文件加密和解密的方法以及对中文文件名文件的上传的utf-8编码支持,已全部代码做了二次代码优化,需要自己手动导入包。以及pom的支持,有需要的可以看下源码,或者联系我本人,博客...

    winzipaes文件加密和解压的工具包,已做了源码修改和jar包整合

    《深入理解WinZip AES文件加密与解压:Java实现与应用》 WinZip AES(Advanced Encryption Standard)是一种广泛应用于文件加密的标准,它以其强大的安全性在众多加密算法中脱颖而出。AES的采用使得用户能够对文件...

    winzipaes20120809.jar

    winzipaes20120809.jar

    文件压缩加密(AES)

    Java中可以使用第三方库如Apache Commons Compress或unrar4java来处理RAR文件的解压缩和解密。 另一方面,`winzipaes_zh_CN_supported.zip`可能包含了关于WinZip AES加密的中文文档或示例。WinZip是Windows平台上的...

    dotnetzip

    4. **加密和设置属性**:可以使用`SetEncryption()`方法为ZIP文件设置密码,`SetComment()`方法添加注释,或者`SetCompressionLevel()`方法调整压缩级别。例如: ```csharp using (var zip = new ZipFile()) { ...

Global site tag (gtag.js) - Google Analytics