1.对文件进行压缩和解压
基本很简单,我在windows平台测试过了,上代码
package cn.tang.zip; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; public class MyZipUtil { public void unzip(File zipFile, File unzipFolder) throws IOException { if (!unzipFolder.exists()) { unzipFolder.mkdir(); } ZipFile zip = new ZipFile(zipFile); unzip(zip, unzipFolder.getAbsolutePath()); zip.close(); } private void unzip(ZipFile zipFile, String parentDir) throws IOException { Enumeration<? extends ZipEntry> entries = zipFile.entries(); byte[] buffer = new byte[128]; while (entries.hasMoreElements()) { ZipEntry entry = entries.nextElement(); String entryName = entry.getName(); File f = new File(parentDir + File.separator + entryName); System.out.println(f.getAbsolutePath()); if (entry.isDirectory()||entryName.endsWith("\\")||entryName.endsWith(File.separator)) { if (!f.exists()) { f.mkdir(); } } else { if (!f.exists()) f.createNewFile(); OutputStream os = new BufferedOutputStream(new FileOutputStream(f)); InputStream is = zipFile.getInputStream(entry); int count = -1; while ((count=is.read(buffer)) != -1) { os.write(buffer, 0, count); } os.close(); is.close(); } } } public void zip(File sourceFile, File zipFile) throws IOException { FileOutputStream fos = new FileOutputStream(zipFile); ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(fos)); zip(sourceFile, out, ""); out.close(); } private void zip(File sourceFile, ZipOutputStream out, String parentDir) throws IOException { if (sourceFile == null || !sourceFile.exists()) throw new FileNotFoundException(); String currentPath = parentDir + sourceFile.getName(); if (sourceFile.isDirectory()) { ZipEntry entry = new ZipEntry(currentPath + File.separator); out.putNextEntry(entry); for (File temp : sourceFile.listFiles()) { zip(temp, out, currentPath + File.separator); } } else { ZipEntry entry = new ZipEntry(currentPath); out.putNextEntry(entry); byte[] buffer = new byte[128]; FileInputStream fis = new FileInputStream(sourceFile); BufferedInputStream bis = new BufferedInputStream(fis); int count = 0; while ((count = bis.read(buffer)) != -1) { out.write(buffer, 0, count); } bis.close(); } } }
这里有点要注意的是,ZipEntry.isDirectory()方法,如果你在linux平台基本没有问题,但是如果在windows平台可能不好用。看看源码就知道了
public boolean isDirectory() { return name.endsWith("/"); }
2.对流进行压缩和解压
JDK中提供了一下几个类来帮助我们对输入输出流进行解压和压缩
public class InflaterInputStream extends FilterInputStream public class InflaterOutputStream extends FilterOutputStream public class DeflaterInputStream extends FilterInputStream public class DeflaterOutputStream extends FilterOutputStream //看看他们的继承关系 public class DeflaterInputStream extends FilterInputStream public class FilterInputStream extends InputStream //看构造方法 public DeflaterInputStream(InputStream inputstream) { this(inputstream, new Deflater()); usesDefaultDeflater = true; } protected FilterInputStream(InputStream inputstream) { in = inputstream; } //装饰着模式,不用说都知道怎么用
这里要注意的是,reset 和mark方法不能用,源代码为证
public synchronized void mark(int i) { } public synchronized void reset() throws IOException { throw new IOException("mark/reset not supported"); }
最近看hadoop 源码的时候发现它实现了这个方法,刚兴趣的同学可以看看
org.apache.hadoop.io.compress.zlib.ZlibCompressor这个类
相关推荐
结合`jar`命令,开发人员可以在不编写Java代码的情况下对文件进行压缩和解压缩。 总之,JDK的压缩功能为Java开发者提供了强大且易于使用的工具,无论是处理ZIP格式还是GZIP格式的文件,都能轻松实现。了解并熟练...
下载解压即可 jdk-8u261-linux-x64.tarjdk-8u261-linux-x64.tarjdk-8u261-linux-x64.tar" 表明这是Java开发工具包的一个更新版本,特别是JDK 8 Update 261(8u261),并且提供的是一个可下载和解压缩的文件,用于在...
Java Development Kit (JDK) 是Java编程语言的核心组件,它包含了一...它不仅提供了基础的Java开发环境,还增强了图像处理能力,特别是对于医疗领域的开发者,能够在32位系统上流畅地进行DICOM文件的压缩和解压缩操作。
它在牺牲一定压缩比的情况下,换取更快的压缩和解压缩速度,这对于大数据处理的实时性和吞吐量至关重要。在Hadoop环境中,Snappy通常作为HDFS的数据块压缩算法,可以显著提高数据读写性能。 综上所述,"hadoop3.3+...
在IT行业中,压缩和解压缩文件是常见的操作,特别是在数据传输和存储时。"支持中文的zip压缩解压"这个话题对于处理包含中文文件名或路径的文件集合尤其重要。在许多编程语言中,包括Java,处理中文字符可能会遇到...
`tar`是打包和解压缩工具,`-zxvf`参数分别表示解压、使用gzip压缩格式和显示详细信息。 4. 解压后,你会看到一个名为`jdk1.8.0_211`的目录。为了全局使用JDK,我们需要配置环境变量。打开或创建`~/.bashrc`或`~/....
- cpio.exe、gawk.exe、basefile.exe、zip.exe、unzip.exe:这些工具用于管理文件压缩和解压缩,特别是在处理JDK构建过程中的相关文件。 6. 系统和系统工具: - procps:进程查看器,用于查看和管理系统资源。 -...
在Java编程环境中,处理压缩和解压缩文件是常见的任务,特别是在需要传输或存储大量数据时。Zip格式是一种广泛使用的压缩格式,它允许我们将多个文件打包成一个单一的ZIP文件,以便于管理和传输。本文将详细讲解如何...
通过对JDK的java.util.zip下的ZipInputStream和ZipOutputStream类进行改造,彻底解决压缩和解压缩文件时的中文文件名乱码问题。 包含已大好的jar包,以及一个如何使用的Demo程序。
在Linux系统中,用户通常需要先使用`tar`命令解压文件,然后用`gzip`或`gunzip`来解压缩,或者直接使用`tar -zxvf`组合命令一步完成解压和解压缩。 安装`jdk-8u181-linux-x64.tar.gz`的步骤通常包括以下几个部分: ...
Java Zip压缩技术是Java平台上的一个关键特性,它允许开发者对文件进行压缩和解压缩操作。在Java中,`java.util.zip`包提供了处理ZIP文件格式的类和接口,包括`ZipOutputStream`用于创建ZIP文件,`ZipInputStream`...
这些类在写入或读取数据时自动处理压缩和解压缩,使得用户可以方便地在Hadoop的输入输出流中使用压缩功能。 此外,Hadoop的Block Compression特性允许在HDFS文件块级别进行压缩,进一步节省存储空间。`...
总结来说,Apache Ant是一个强大的构建工具,它提供了一种标准化的方式来管理Java项目的构建过程,包括压缩和解压缩文件。通过编写XML配置文件,开发者可以定制自己的构建流程,从而提高效率并减少手动错误。在给定...
它在许多Google项目中被广泛使用,因为它能够在保持相对良好的压缩效果的同时,提供快速的压缩和解压缩速度。 为了进行性能测试,作者选择了一个常见的、大型的输入文件,即JDK的JavaDoc文档。由于文件大小适中,且...
1. **速度快**:Snappy的设计重点在于快速压缩和解压缩速度,这对于大量数据的实时处理非常重要。 2. **较低的CPU消耗**:与其他高压缩比的算法相比,Snappy在保持合理压缩比的同时,CPU消耗相对较低。 3. **易于...
Red Hat 安装 JDK 与 IntelliJ IDEA 在本文中,我们将详细介绍如何在 Red Hat 系统中安装 JDK ...通过使用 YUM 工具和解压缩安装包,我们可以轻松地安装和配置 JDK 和 IntelliJ IDEA,从而开始我们的 Java 开发之旅。
在Java编程语言中,压缩和解压缩文件是常见的任务,特别是在数据存储和传输时。而AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,用于保护数据的安全性。本篇文章将详细探讨如何在Java中实现...
- 选择操作方案:提供压缩和解压缩两种操作模式供用户选择。 - 其他辅助功能:可能包括文件预览、进度显示、错误处理等,以增强用户体验和系统稳定性。 Huffman算法的实现涉及到字符频率统计、树结构构建、编码...
7-Zip是一款免费且功能强大的压缩和解压缩软件,支持多种文件格式,包括`.zip`。在7-Zip中打开文件,选择解压到一个合适的目录,例如`C:\Java\`。 解压完成后,你会得到一个名为`jdk-8u171-linux-x64.tar.gz`的文件...