Java压缩类库的使用-2.JDK中的打包、压缩类库

  inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish)。

  这里忽略了jar,因为jar实质上属于zip压缩。(来源:http://blog.csdn.net/inkfish)

JDK ZLIB压缩:(来源:http://blog.csdn.net/inkfish)

package study.inkfish.compress;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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.zip.DeflaterOutputStream;
import java.util.zip.InflaterInputStream;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
public class JdkZLIBCompress extends Compress {
@Override
protected void doCompress(File srcFile, File destFile) throws IOException {
OutputStream out = null;
InputStream is = null;
try {
is = new BufferedInputStream(new FileInputStream(srcFile), bufferLen);
out = new DeflaterOutputStream(new BufferedOutputStream(new FileOutputStream(destFile), bufferLen));
IOUtils.copy(is, out);
} finally {
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(out);
}
}
@Override
protected void doDecompress(File srcFile, File destDir) throws IOException {
InputStream is = null;
OutputStream os = null;
try {
File destFile = new File(destDir, FilenameUtils.getBaseName(srcFile.toString()));
is = new InflaterInputStream(new BufferedInputStream(new FileInputStream(srcFile), bufferLen));
os = new BufferedOutputStream(new FileOutputStream(destFile), bufferLen);
IOUtils.copy(is, os);
} finally {
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(os);
}
}
}

JDK ZIP压缩(仅适用于压缩一个文件):(来源:http://blog.csdn.net/inkfish)

package study.inkfish.compress;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import org.apache.commons.io.IOUtils;
public class JdkZipCompress extends Compress {
@Override
protected void doCompress(File srcFile, File destFile) throws IOException {
ZipOutputStream zout = null;
InputStream is = null;
try {
is = new BufferedInputStream(new FileInputStream(srcFile), bufferLen);
zout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(destFile), bufferLen));
zout.putNextEntry(new ZipEntry(srcFile.getName()));
IOUtils.copy(is, zout);
zout.closeEntry();
} finally {
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(zout);
}
}
@Override
protected void doDecompress(File srcFile, File destDir) throws IOException {
ZipInputStream is = null;
try {
is = new ZipInputStream(new BufferedInputStream(new FileInputStream(srcFile), bufferLen));
ZipEntry entry = null;
while ((entry = is.getNextEntry()) != null) {
if (entry.isDirectory()) {
File directory = new File(destDir, entry.getName());
directory.mkdirs();
is.closeEntry();
} else {
OutputStream os = null;
try {
os = new BufferedOutputStream(
new FileOutputStream(new File(destDir, entry.getName())), bufferLen);
IOUtils.copy(is, os);
} finally {
IOUtils.closeQuietly(os);
}
is.closeEntry();
}
}
} finally {
IOUtils.closeQuietly(is);
}
}
}

JDK GZIP压缩:(来源:http://blog.csdn.net/inkfish)

package study.inkfish.compress;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
public class JdkGZIPCompress extends Compress {
@Override
protected void doCompress(File srcFile, File destFile) throws IOException {
OutputStream out = null;
InputStream is = null;
try {
is = new BufferedInputStream(new FileInputStream(srcFile), bufferLen);
out = new GZIPOutputStream(new BufferedOutputStream(new FileOutputStream(destFile), bufferLen));
IOUtils.copy(is, out);
} finally {
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(out);
}
}
@Override
protected void doDecompress(File srcFile, File destDir) throws IOException {
InputStream is = null;
OutputStream os = null;
try {
File destFile = new File(destDir, FilenameUtils.getBaseName(srcFile.toString()));
is = new GZIPInputStream(new BufferedInputStream(new FileInputStream(srcFile), bufferLen));
os = new BufferedOutputStream(new FileOutputStream(destFile), bufferLen);
IOUtils.copy(is, os);
} finally {
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(os);
}
}
}

注:org.apache.commons.io包为Apache common io,项目首页:http://commons.apache.org/io/

,提供了IO操作的很多方便的方法,基于Apache 2.0 License,可用于商业用途。(来源:http://blog.csdn.net/inkfish)

时间: 2025-01-25 02:32:07

Java压缩类库的使用-2.JDK中的打包、压缩类库的相关文章

360压缩软件如何设置关联电脑中所有的压缩文件格式

  360压缩软件如何设置关联电脑中所有的压缩文件格式.不少用户选择在电脑中使用360压缩软件,其中有一个原因就是360压缩支持多种压缩文件格式.虽然常见的压缩文件格式大多是zip和rar,但还是有用户发现无法通过360压缩来解压一些格式的压缩文件.其实,可以通过相关的设置来使360压缩关联其他压缩文件格式. 1.查看360压缩软件是否为最新版本,如果不是则进行升级; 2.打开360压缩的安装目录,双击打开主程序; 3.点击界面右上角的"工具"; 4.在打开的菜单中点击"选项

Java Web Start学习,与JDK中keytool常用命令

Java Web Start(以下简称JWS)是SUN提供的一种通过Web来部署和发布Java 程序的新技术,它既可以用来发布Application,也可以用来发布Applet,它获去年全球Java技术最佳创意奖.它仅在第一次运行时下载程序,以后的事情,就全全交给JWS,包括版本的自动更新和维护.这是我们曾经梦寐以求的事情,程序运行在客户端(本地运行,当然有足够的速度),但不用去安装配置客户端,也不用去考虑版本升级后对客户端的维护,这就是JWS提供给我们的好处之一.OK,下面我们就来看看如何玩转

Word如何对文档中图片进行压缩处理

  步骤一:Word中图片工具栏上的"压缩图片"按钮和"压缩图片"对话框. 文档中图片进行压缩处理-word文档图片压缩"> 步骤二:来到这里,我们一起来看看压缩后的图片与原图的大小对比一下,果然给它瘦身了不少喔! 步骤三:操作很基本,但这一步很重要,所以这里给各位朋友普及啦.

java源码-为什么jdk中的类不能被重写啊?

问题描述 为什么jdk中的类不能被重写啊? 是jvm有什么保护措施吗?我的意思就是,假设:我自己写一个String类会和jdk中的冲突,也就报错,写不了,为什么呢?跪求 解决方案 这是Java的类加载机制决定的,Java使用的是委托父类加载,所有的Java类库都是由指定的类加载器加载的,即使你定义一个一模一样的String类,最终引用加载的仍然是Java类库的类.这就是Java防止篡改的原理. 解决方案二: 当然是这样,否则很可怕了.比如说你的程序中有一个加密的逻辑,有人编写一个恶意的插件程序,

JAVA中的deflate压缩实现方法_java

在文件的传输过程中,为了使大文件能够更加方便快速的传输,一般采用压缩的办法来对文件压缩后再传输,JAVA中的java.util.zip包中的Deflater和Inflater类为使用者提供了DEFLATE算法的压缩功能,以下是自已编写的压缩和解压缩实现,并以压缩文件内容为例说明,其中涉及的具体方法可查看JDK的API了解说明. /** * * @param inputByte * 待解压缩的字节数组 * @return 解压缩后的字节数组 * @throws IOException */ pub

Java 9的JDK中值得期待的:不仅是模块化

[译者注]在本文中,作者介绍了即将在9.21发布的Java 9新特性,除了最重要的模块化以外,还涉及到编译,工具,协议,缓存等新特点,也提及了在此次版本中移除的功能,供Java爱好者阅读和参考. 以下为译文: 在多次延期后,Java 9将于9月21日以Java开发工具包9的形式出现,这是自2014年3月以来,Java标准版的第一次重大升级.官方列出了JDK 9的大约90个新特性,模块化是最主要的一个.将Java重新配置成模块化格式,这项任务已经持续了多年,但在编译.代码缓存和JavaScript

JAVA学习(二):JDK介绍及其结构、用途

JDK介绍及其结构.用途 1.JDK的介绍 JDK是Java Development Kit 的缩写,是Sun Microsystems针对Java开发员的产品.它由一个处于操作系统层之上的运行环境还有开发者编译,调试和运行用Java语言写的applet和应用程序所需的工具组成.想要开发java产品,需先安装JDK. (1).JDK包含的基本组件包括: javac – 编译器,将源程序转成字节码: jar – 打包工具,将相关的类文件打包成一个文件: javadoc – 文档生成器,从源码注释中

JDK中常用包及其类和功能详细剖析

JDK所提供的所有标准Java类都存放在Java包中,如java.lang包中包含了运行Java必不可少的系统类.由于系统会自动将java.lang引入,所以不需要在源文件中用import语句来显示地引入这个包.另外,Java跪地过java.util和java.io是必须提供的标准包,在JDK中常用的包有以下几种: 1.java.lang:语言包 2.java.util:实用包 3.java.awt:抽象窗口工具包 4.javax.swing:轻量级的窗口工具包,这是目前使用最广泛的GUI程序设

Java如何在List或Map遍历过程中删除元素_java

遍历删除List或Map中的元素有很多种方法,当运用不当的时候就会产生问题.下面通过这篇文章来再学习学习吧. 一.List遍历过程中删除元素 使用索引下标遍历的方式 示例:删除列表中的2 public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(2); list.add(3); list.add(