`

使用Java进行文件压缩

    博客分类:
  • Java
阅读更多

         在web开发过程中,进行文件的压缩传输是一种常见的需求。比如一种场景:用户需要下载定时生成的报表,我们需要先对报表文件进行压以方便用户的下载,并减少文件的存储空间。
         事实上,JDK已经提供了文件压缩/解压缩的支持,可以生成zip/gzip的压缩格式,并且支持支持“校验和”以检查压缩文件的完整性。通常会使用CRC(循环冗余校验)算法进行校验。

         遗憾的是,JDK的文件压缩功能无法处理文件名称包含中文的问题。为此,我们需要用到ant.jar第三方开源支持包。

          如下所示代码,采用Junit 4进行压缩功能的测试:

 

/*
 * Copyright (c) 2014, hello_nick_xu@foxmail.com, All rights reserved.
 */
package com.test.zip;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
import org.junit.Test;

/**
 * 功能简述: 进行文件压缩功能测试
 * @author Nick Xu
 */
public class ZipTest {
    //源文件夹
	private final String sourceDirStr = "E:/source";
	//目标文件
	private final String zipPath = "E:/dest.zip";
	//缓冲区大小设置
	private static final int BUFFER_SIZE = 1024;

	/** 
	 * 功能简述: 普通压缩测试
	 * @throws Exception
	 */
	@Test
	public void testZip() throws Exception {

		// zip输出流:使用缓冲流进行了包装
		ZipOutputStream zipOut = new ZipOutputStream(
		    new BufferedOutputStream(
				new FileOutputStream(zipPath), BUFFER_SIZE));

		// 得到源文件夹下的文件列表
		File sourceDirectory = new File(sourceDirStr);
		File[] files = sourceDirectory.listFiles();

		byte[] bs = new byte[BUFFER_SIZE];    // 缓冲数组
		int value = -1;   //文件是否结束标记
		
		for (File file : files) { // 遍历所有的文件
			zipOut.putNextEntry(new ZipEntry(file.getName()));   // 存入文件名称,便于解压缩
		    //文件读写
			BufferedInputStream bfInput = new BufferedInputStream(
					new FileInputStream(file), BUFFER_SIZE);
			while ((value = bfInput.read(bs, 0, bs.length)) != -1) {
				zipOut.write(bs, 0, value);
			}
			bfInput.close(); //关闭缓冲输入流
		}
		//关闭输出流
		zipOut.flush();
		zipOut.close();
	}
	
	/** 
	 * 功能简述: 文件压缩测试,获取校验和
	 * @throws Exception
	 */
	@Test
	public void testZipWithCheckSum() throws Exception {

		//被校验的输出流:使用CRC32校验算法
		CheckedOutputStream checkedOutput = new 
		    CheckedOutputStream(new BufferedOutputStream(
				new FileOutputStream(zipPath), BUFFER_SIZE),new 
			    CRC32());
		//使用ZipOutputStream进行包装
		ZipOutputStream zipOut = new ZipOutputStream(checkedOutput);

		// 得到文件名称列表
		File sourceDirectory = new File(sourceDirStr);
		File[] files = sourceDirectory.listFiles();

		// 读写文件
		byte[] bs = new byte[BUFFER_SIZE];
		int value = -1;
		for (File file : files) {
			BufferedInputStream bfInput = new BufferedInputStream(
					new FileInputStream(file), BUFFER_SIZE);
			zipOut.putNextEntry(new ZipEntry(file.getName()));
			while ((value = bfInput.read(bs, 0, bs.length)) != -1) {
				zipOut.write(bs, 0, value);
			}
			bfInput.close();
		}
		zipOut.flush();
		zipOut.close();
		
		//获取校验和:用于校验文件的完整性
		long checkSum = checkedOutput.getChecksum().getValue();
		System.out.println("checkSum : " + checkSum);
	}
}

 完整项目功能,参见附件

分享到:
评论

相关推荐

    Java把文件压缩成zip

    1. 使用`java.util.zip`包中的类进行文件压缩。 2. 如何创建ZIP输出流并写入文件数据。 3. 如何读取文件并将其添加到ZIP存档中。 #### 技术背景 在Java中,`java.util.zip`包提供了对ZIP文件格式的支持。该包包含了...

    java文件分割压缩

    Java文件分割压缩是一种常见的操作,尤其在处理大数据或者网络传输时非常有用,因为单个大文件可能会导致处理效率低或传输困难。以下是一些相关的Java编程知识点: 1. **文件I/O操作**:在Java中,`java.io`包提供...

    JAVA文件压缩与解压缩实践(源代码+论文)

    综上所述,这个实践项目涵盖了Java文件压缩与解压缩的核心技术,是学习和理解Java I/O和压缩库的宝贵资源。通过阅读源代码和论文,开发者不仅可以学习如何在Java中进行文件压缩,还能了解到如何将这些技术应用于实际...

    java 解压,压缩linux GZ压缩文件

    GZ是一种常用的文件压缩格式,它利用了gzip程序进行压缩,而在Java中,我们可以使用`java.util.zip`包中的类来实现对GZ文件的压缩和解压缩操作。 在给出的代码中,有两个主要的方法:`testGzipOutput()`用于解压GZ...

    java 解压缩 和 压缩 文件

    无论是为了节省存储空间,还是为了方便数据传输,了解如何使用Java进行文件压缩和解压缩都是十分重要的。本篇将详细介绍Java中如何实现这一功能,以及相关的重要知识点。 首先,Java标准库提供了`java.util.zip`包...

    JAVA文件压缩与解压缩实践(源代码+LW).rar

    本资源提供了“JAVA文件压缩与解压缩实践(源代码+LW)”的实例,其中包含了源代码和相关的论文资料,旨在帮助开发者深入理解并实践Java中的文件压缩技术。 首先,我们要了解Java中用于文件压缩的主要类库——Java....

    java实现视频压缩

    Java作为一种广泛使用的编程语言,也提供了实现视频压缩的能力。本篇将详细探讨如何使用Java来实现视频压缩,以及涉及到的相关知识点。 首先,我们要理解视频压缩的基本原理。视频是由一帧一帧的静态图像(图片)...

    java ftp 压缩

    首先,让我们来看看如何使用Java进行文件压缩。在Java中,我们可以使用第三方库如Apache Commons Compress或JARL (Java Archive and Library) 来实现RAR格式的压缩。Apache Commons Compress库提供了广泛的压缩和解...

    java多文件压缩成zip文件并实现下载

    在Java编程中,将多个文件压缩成一个ZIP文件并实现下载是一个常见的任务,尤其是在处理大量数据或文件分发时。这个过程涉及到Java的I/O流、压缩和HTTP响应的使用。下面将详细介绍如何实现这个功能。 首先,我们需要...

    JAVA代码实例-文件压缩与解压缩实践(源代码+论文).rar

    总之,这个压缩包提供的资源不仅有助于初学者深入理解Java文件压缩和解压缩的实现,也为那些正在进行相关项目开发的程序员提供了实用的工具和参考资料。无论是理论学习还是实践经验,这个资源都将对提升Java编程技能...

    java文件压缩

    ### Java文件压缩技术详解 #### 一、引言 在数据处理与传输过程中,文件压缩是一种常见的需求。通过压缩不仅可以减少文件占用的空间,还可以提高数据在网络中的传输效率。Java作为一种广泛应用的编程语言,提供了...

    java开发中压缩js,css文件

    在实际项目中,我们通常会将文件压缩集成到构建流程中,如使用Maven或Gradle等构建工具,通过插件来自动化这个过程。例如,Maven的`maven-resources-plugin`和`maven-war-plugin`可以配合使用`yuicompressor-maven-...

    java 中 zip压缩文件解压工具类

    在Java编程环境中,处理文件压缩和解压缩是常见的任务,特别是在构建可执行的JAR包或者处理数据传输时。本文将深入探讨如何使用Java来处理ZIP文件,特别是针对标题所提及的“java 中 zip压缩文件解压工具类”。我们...

    使用Java API进行tar.gz文件及文件夹压缩解压缩.docx

    } } }}二、从 tar.gz 文件解压文件在 Java 中,我们可以使用 Apache Commons Compress 库来解压 tar.gz 文件。下面的例子展示了如何将 tar.gz 文件解压到指定的目录。import org.apache.commons.compress.archivers...

    windows 下java调用winrar压缩文件为rar 格式

    在Windows环境下,使用Java进行程序开发时,有时我们需要对文件进行压缩操作,比如将文件压缩成RAR格式。这个过程涉及到Java的本地方法调用、文件I/O操作以及第三方库的集成。下面我们将详细探讨如何在Java中实现这...

    JAVA文件压缩与解压缩实践,java解压缩zip文件,Java源码.zip

    在Java编程语言中,文件的压缩与解压缩是常见的操作,尤其在数据传输、存储优化以及备份场景下显得尤为重要。...通过上述知识点,开发者能够有效地在Java环境中进行ZIP文件的压缩与解压缩操作,满足实际项目需求。

Global site tag (gtag.js) - Google Analytics