`
shihuan830619
  • 浏览: 583084 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

commons-compress的一些应用

    博客分类:
  • J2EE
阅读更多
依赖commons-compress-1.2.jar和commons-lang3-3.0.l.jar包。

TestCompress.java类代码:
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;

import org.apache.commons.compress.archivers.ArchiveException;
import org.apache.commons.compress.archivers.ArchiveInputStream;
import org.apache.commons.compress.archivers.ArchiveOutputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.archivers.zip.ZipFile;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;

public class TestCompress {

	static Logger logger = Logger.getLogger(TestCompress.class);
	
	//多重打包
	public static void makeZip() throws IOException, ArchiveException{
		File f1 = new File("D:/compresstest.txt");
        File f2 = new File("D:/test1.xml");
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        
        //ArchiveOutputStream ostemp = new ArchiveStreamFactory().createArchiveOutputStream("zip", baos);
        ZipArchiveOutputStream ostemp = new ZipArchiveOutputStream(baos);
        ostemp.setEncoding("GBK");
        ostemp.putArchiveEntry(new ZipArchiveEntry(f1.getName()));
        IOUtils.copy(new FileInputStream(f1), ostemp);
        ostemp.closeArchiveEntry();
        ostemp.putArchiveEntry(new ZipArchiveEntry(f2.getName()));
        IOUtils.copy(new FileInputStream(f2), ostemp);
        ostemp.closeArchiveEntry();
        ostemp.finish();
        ostemp.close();

//      final OutputStream out = new FileOutputStream("D:/testcompress.zip");
        final OutputStream out = new FileOutputStream("D:/中文名字.zip");
        ArchiveOutputStream os = new ArchiveStreamFactory().createArchiveOutputStream("zip", out);
        os.putArchiveEntry(new ZipArchiveEntry("打包.zip"));
        baos.writeTo(os);
        os.closeArchiveEntry();
        baos.close();
        os.finish();
        os.close();
	}
	
	//解压zip包中的所有文件
	public static void makeUnZip() throws IOException, ArchiveException{
		File f = new File("D:/中文名字.zip"); 
        ZipFile zf = new ZipFile(f, "GBK"); 
        File folder = new File("D:/中文名字"); 
        if (!folder.exists()) { 
            folder.mkdirs(); 
        } 

        for (Enumeration<ZipArchiveEntry> files = zf.getEntries(); files.hasMoreElements();) {
        	ZipArchiveEntry zae = files.nextElement(); 
            String zipname = zae.getName(); 
            if (zipname.endsWith(".zip")) {
                String innerzip = StringUtils.removeEnd(zipname, ".zip"); 
                File innerfolder = new File(folder + File.separator + innerzip); 
                if (!innerfolder.exists()) {
                    innerfolder.mkdirs();
                } 
                ZipArchiveInputStream zais = new ZipArchiveInputStream(zf.getInputStream(zae), "GBK", true); 
                FileOutputStream fos = null; 
                ZipArchiveEntry innerzae = null; 
                while ((innerzae = zais.getNextZipEntry()) != null) { 
                    fos = new FileOutputStream(folder + File.separator + innerzip + File.separator + innerzae.getName()); 
                    IOUtils.copy(zais, fos);
                } 
                zais.close(); 
                fos.flush(); 
                fos.close(); 
            } else { 
                ZipArchiveEntry packinfo = zf.getEntry(zipname); 
                String filename = folder + File.separator + zipname; 
                FileOutputStream fos = new FileOutputStream(filename); 
                InputStream is = zf.getInputStream(packinfo); 
                IOUtils.copy(is, fos); 
                is.close(); 
                fos.flush(); 
                fos.close(); 
            } 
        } 
        zf.close();

	}
	
	/**
     * 把一个ZIP文件解压到一个指定的目录中
     * @param zipfilename ZIP文件抽象地址
     * @param outputdir 目录绝对地址
     */
    public static void unZipToFolder(String zipfilename, String outputdir) throws IOException {
        File zipfile = new File(zipfilename);
        if (zipfile.exists()) {
            outputdir = outputdir + File.separator;
            FileUtils.forceMkdir(new File(outputdir));

            ZipFile zf = new ZipFile(zipfile, "UTF-8");
            Enumeration zipArchiveEntrys = zf.getEntries();
            while (zipArchiveEntrys.hasMoreElements()) {
                ZipArchiveEntry zipArchiveEntry = (ZipArchiveEntry) zipArchiveEntrys.nextElement();
                if (zipArchiveEntry.isDirectory()) {
                    FileUtils.forceMkdir(new File(outputdir + zipArchiveEntry.getName() + File.separator));
                } else {
                    IOUtils.copy(zf.getInputStream(zipArchiveEntry), FileUtils.openOutputStream(new File(outputdir + zipArchiveEntry.getName())));
                }
            }
        } else {
            throw new IOException("指定的解压文件不存在:\t" + zipfilename);
        }
    }
	
	//一层打包
	public static void makeOnlyZip() throws IOException, ArchiveException{
		File f1 = new File("D:/compresstest.txt");
        File f2 = new File("D:/test1.xml");
        
        final OutputStream out = new FileOutputStream("D:/中文名字.zip");
        ArchiveStreamFactory asf = new ArchiveStreamFactory();
		asf.setEntryEncoding("GB18030");
		ArchiveOutputStream aos = asf.createArchiveOutputStream(ArchiveStreamFactory.ZIP, out);
        
        aos.putArchiveEntry(new ZipArchiveEntry(f1.getName()));
        IOUtils.copy(new FileInputStream(f1), aos);
        aos.closeArchiveEntry();

        aos.putArchiveEntry(new ZipArchiveEntry(f2.getName()));
        IOUtils.copy(new FileInputStream(f2), aos);
        aos.closeArchiveEntry();
        aos.close();
	}
    
	//解压zip包中的第一个文件
	public static void makeOnlyUnZip() throws ArchiveException, IOException{
		final InputStream is = new FileInputStream("D:/中文名字.zip");
		ArchiveInputStream in = new ArchiveStreamFactory().createArchiveInputStream(ArchiveStreamFactory.ZIP, is);
		ZipArchiveEntry entry = entry = (ZipArchiveEntry) in.getNextEntry();
		
		String dir = "D:/cnname";
		File filedir = new File(dir);
		if(!filedir.exists()){
			filedir.mkdir();
		}
//		OutputStream out = new FileOutputStream(new File(dir, entry.getName()));
		OutputStream out = new FileOutputStream(new File(filedir, entry.getName()));
		IOUtils.copy(in, out);
		out.close();
		in.close();
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) throws ArchiveException {
		try {
//			makeZip();
//			makeOnlyZip();
//			makeOnlyUnZip();
//			makeUnZip();
			unZipToFolder("D:\\中文名字.zip", "D:\\中文哈");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}
分享到:
评论

相关推荐

    commons-compress.jar包

    总的来说,`commons-compress.jar` 是Java开发者处理各种压缩格式的强大工具,通过其提供的API,可以方便地在应用中集成压缩和解压功能,同时支持多种格式,极大地提升了开发效率和代码的可维护性。无论是处理单一...

    commons-compress-1.18-bin jar包

    Commons Compress库是Apache软件基金会开发的一个开源项目,它的主要目标是提供一个统一的API来处理各种不同的压缩格式。在给定的"commons-compress-1.18-bin" jar包中,包含了这个库的可执行版本,适用于Java平台。...

    commons-compress-1.18.jar【说明:Java、压缩库、压缩算法、解压缩、数据存储、压缩格式】

    commons-compress-1.18.jar是一个Java压缩库,专注于数据的压缩和解压缩功能,支持多种常见的压缩格式。它提供了广泛的压缩算法和工具,用于数据存储、传输和优化存储空间。 【使用人群】 适用于Java开发者、数据...

    commons-compress-1.17-bin

    《Apache Commons Compress库在Android中的应用》 Apache Commons Compress库是Java平台上的一个开源项目,主要用于处理各种文件压缩格式。在这个特定的压缩包"commons-compress-1.17-bin"中,包含了用于在Android...

    commons-compress

    commons-compress不仅支持基本的ZIP操作,还支持ZIP64(处理大文件)和一些扩展特性。 这个库的使用非常简单,只需导入相应的依赖,就可以方便地处理各种压缩格式,极大地简化了Java开发者的工作。它提供了一致的...

    Apache Commons Compress ( commons-compress-1.15-bin.zip)

    Apache Commons Compress库是Java平台上的一个开源项目,专门用于处理各种文件压缩格式。这个库提供了方便的API,使得开发者可以轻松地在Java应用程序中实现文件的压缩和解压缩功能。"commons-compress-1.15-bin.zip...

    commons-compress-1.18.zip

    Commons Compress不仅提供基本的压缩和解压缩功能,还支持一些高级特性,如处理自解压文件(如Windows的自解压RAR文件),以及处理某些格式的特定属性,例如ZIP文件的密码保护或TAR文件的长路径名。 5. **与其他库...

    文件压缩解压缩包 Commons Compress

    除了基本的压缩和解压缩功能,Commons Compress 还提供了对一些高级特性的支持,如存档的创建、更新和遍历,以及文件和目录的过滤。例如,你可以创建一个新的tar存档,并添加指定的文件或目录,然后写入到输出流: ...

    common compress压缩源码

    3. 应用安装包:许多Java应用程序会使用Common Compress来打包和解包资源。 4. 日志处理:压缩日志文件,降低存储成本。 六、版本更新与兼容性 Common Compress持续更新,以修复已知问题和增加新特性。如我们所见...

    commons-codec-1.6-bin.tar.gz

    虽然在“commons-codec-1.6-bin.tar.gz”中并未直接包含BZip2的功能,但在其他Apache组件如Apache Commons Compress中可以找到相关实现。 6. **Phonetic编码**:如Soundex、Metaphone和Caverphone等,这些是将英语...

    文件解压和压缩 解决中文乱码

    在IT行业中,文件的压缩和解压是一项基本操作,尤其在数据传输、存储优化和程序打包等方面广泛应用。这里我们关注的是“文件解压和压缩”以及处理“中文乱码”的问题。在Java编程语言中,提供了多种库和工具来处理...

    commons-io-2.6--java框架技术

    - `Base64`: 实现了Base64编码和解码,广泛应用于网络传输和数据存储。 7. **实用工具**: - `TempFileUtils`: 创建临时文件和目录,确保它们在不再使用时被正确删除。 - `SystemUtils`: 提供了关于运行时环境的...

    Java实现Excel读写的poi 5.2.1版本jar

    `commons-compress-1.21.jar`:Apache Commons Compress库提供了多种压缩算法,POI使用它来处理OOXML文件中的ZIP压缩。 `commons-collections4-4.4.jar`:Apache Commons Collections库提供了各种集合框架的增强...

    比较全面的:Jakarta-commons jar包(附: chm参考手册 & 资源简介)

    commons-compress 操作压缩文件的 API commons-configuration 可以从xml、properties、JNDI、JDBC、System properties、Applet parameters和Servlet parameters等读取信息 commons-daemon 可以帮你实现将一个普通...

    Jakarta commons docs API CHM 格式

    commons-compress 操作压缩文件的 API commons-configuration 可以从xml、properties、JNDI、JDBC、System properties、Applet parameters和Servlet parameters等读取信息 commons-daemon 可以帮你实现将一个普通...

    压缩解压所需jar包支持各种压缩格式

    Apache Commons Compress库为Java开发者提供了一站式的解决方案,无论是处理常见的ZIP和GZIP格式,还是处理一些不太常见的格式,都能轻松应对。通过利用这个库,开发者可以专注于他们的核心业务逻辑,而不是花费时间...

    commons-jar

    "commons-jar" 是一个与Java相关的开源项目,它的核心是Apache Commons库的一部分,这个库主要关注于提供一些通用的Java组件和工具,方便开发者在处理JAR(Java Archive)文件时能更加高效和便捷。Apache Commons是...

    org.apache.commonsjar包官方免费版

    本站为大家提供了org.apache.commons的jar包下载地址,Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动,需要此类JAR包的朋友们欢迎前来下载使用。 基本简介 commons包,根据...

Global site tag (gtag.js) - Google Analytics