`

java实现文件解压缩,ZipInputStream,ZipOutputStream

    博客分类:
  • JAVA
阅读更多

package compress;

 

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.CheckedInputStream;

import java.util.zip.CheckedOutputStream;

import java.util.zip.ZipEntry;

import java.util.zip.ZipInputStream;

import java.util.zip.ZipOutputStream;

 

public class Compress {

private String path;

private String name;

/**

* path文件或文件夹压缩后保存的路径

* name文件或文件夹压缩后保存的名字

* is是否创建path(如果path路径不存在)

* path、name这两个参数都可以为空,即默认保存在要压缩文件或文件夹所在的目录,压缩后的文件名为要压缩的文件或文件夹的名称

* @param path

* @param name

* @param is

*/

public Compress(String path, String name, boolean is) {

if(null != path && !"".equals(path)) {

File file = new File(path);

if(!file.exists() && is) {

file.mkdirs();

}

}

this.path = path;

this.name = name;

}

 

/**

* 压缩功能

* file要压缩的文件或文件夹

* @param file

*/

public void compress(File file) {

if(!file.exists()) {

throw new RuntimeException("压缩路径文件或文件夹不存在:" + file.getAbsolutePath());

}

path = null == path || "".equals(path) ? file.getParent() : path;

name = (null == name || "".equals(name) ? file.getName().split("[.]")[0] : name) + ".zip";

try {

FileOutputStream out = new FileOutputStream(path + "//" + name);

CheckedOutputStream checked = new CheckedOutputStream(out, new CRC32());

ZipOutputStream write = new ZipOutputStream(checked);

compress(file, write, "");

write.close();

} catch (Exception e) {

e.printStackTrace();

}

}

 

/**

* 判断是目录还是文件

* @param file被压缩的文件或文件夹

* @param write写流

* @param parent路径

*/

private void compress(File file, ZipOutputStream write, String parent) {

if (file.isDirectory()) {

System.out.println("压缩目录:" + file.getName());

compressDirectory(file, write, parent);

} else {

System.out.println("压缩文件:" + file.getName());

compressFile(file, write, parent);

}

}

 

/**

* 压缩一个目录

* @param dir

* @param write

* @param parent

*/

private void compressDirectory(File dir, ZipOutputStream write, String parent) {

if (!dir.exists()) {

return;

}

File[] files = dir.listFiles();

for (int i = 0; i < files.length; i++) {

compress(files[i], write, parent + dir.getName() + "/");

}

}

 

/**

* 压缩一个文件

* @param file

* @param write

* @param parent

*/

private void compressFile(File file, ZipOutputStream write, String parent) {

if (!file.exists()) {

return;

}

try {

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));

String name = new String((parent + file.getName()).getBytes(), "UTF-8");

//此处保存文件名如果含有中文,文件名会出现乱码(使用加压缩工具打开的时候),但是使用程序解压一切正常

ZipEntry entry = new ZipEntry(name);

write.putNextEntry(entry);

int count;

byte data[] = new byte[1024];

while ((count = bis.read(data, 0, 1024)) != -1) {

write.write(data, 0, count);

}

bis.close();

} catch (Exception e) {

throw new RuntimeException(e);

}

}

 

/**

* 解压缩功能,类似与压缩工具中的解压到当前文件夹

* @param file被解压的zip文件

*/

public static void unCompress(File file) {

if(!file.exists()) {

throw new RuntimeException("解压缩路径文件不存在:" + file.getAbsolutePath());

}

try {

FileInputStream in = new FileInputStream(file);

CheckedInputStream check = new CheckedInputStream(in, new CRC32());

ZipInputStream read = new ZipInputStream(check);

unCompress(read, file.getParent());

read.close();

}catch (Exception e) {

e.printStackTrace();

}

 

}

 

/**

* 路径创建

* @param read

* @param path

* @throws Exception

*/

private static void unCompress(ZipInputStream read, String path) throws Exception{

ZipEntry entry = null;

while(null != (entry = read.getNextEntry())) {

String name = entry.getName();

File file = new File(path + "//" + name);

file.getParentFile().mkdirs();

unCompressFile(read, file);

System.out.println("解压缩文件:" + name);

read.closeEntry();

}

}

 

/**

* 解压文件

* @param read

* @param file

*/

private static void unCompressFile(ZipInputStream read, File file) {

try{

BufferedOutputStream write = new BufferedOutputStream(new FileOutputStream(file));

int count;

byte data[] = new byte[1024];

while ((count = read.read(data, 0, 1024)) != -1) {

write.write(data, 0, count);

}

write.close();

}catch (Exception e) {

e.printStackTrace();

}

}

}

 

分享到:
评论

相关推荐

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

    4. **源代码实现**:实践中提供的源代码展示了如何使用Java API来实现文件和目录的压缩与解压缩。这可能包括读取文件,创建压缩流,写入数据到压缩流,以及从压缩流中读取和写入文件等步骤。 5. **文件操作**:在...

    (JAVA)利用Java实现zip压缩.解压缩.rar_decompress rar java_zip 压缩

    在Java编程语言中,我们可以利用内置的`java.util.zip`包来实现文件的压缩和解压缩功能。这个包提供了一系列的类,如`ZipOutputStream`用于创建ZIP压缩文件,`ZipInputStream`则用于读取和解压缩ZIP文件。在本教程中...

    java压缩文件解压缩和文件的压缩

    在Java编程语言中,处理...通过以上这些知识点,你可以构建一个强大的Java工具类,实现ZIP和RAR文件的压缩与解压缩,包括处理加密的ZIP文件。这个工具类可以是项目中一个可靠的助手,提高代码的可重用性和可维护性。

    文件解压缩实现

    本文将深入探讨如何实现文件的解压缩功能,特别是针对zip文件格式的处理。我们将基于Java编程语言,以`MyZip.java`这个文件作为示例,来详细讲解相关的编程知识。 首先,我们要理解zip文件格式。ZIP是一种广泛使用...

    Java实现的带密码压缩与解压zip文件源码

    8. **性能优化**:在处理大量文件时,可以考虑使用多线程来并行压缩或解压缩,以提高效率。然而,这会增加代码的复杂性,需要谨慎处理同步问题。 以上是关于Java实现带密码的ZIP文件压缩和解压的基本概念和实现细节...

    基于JAVA实现的文件压缩与解压缩实践(源代码+论文).zip

    在本项目中,我们主要探讨的是如何利用Java编程语言实现文件的压缩与解压缩功能。这个实践项目包含源代码和相关的论文,对于初级到进阶的Java开发者,或者是正在寻求毕业设计、课程设计、大作业或者工程实训项目的...

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

    这个实践项目旨在利用Java编程语言实现文件的压缩与解压缩功能,为用户提供一个高效、稳定且易于使用的文件处理工具。 源代码部分包含了完整的Java实现代码,包括压缩和解压缩两个主要功能。在压缩方面,代码使用了...

    java实现压缩解压缩

    在Java编程语言中,实现文件的压缩和解压缩是一项常见的任务,特别是在开发Web应用程序时。本文将深入探讨如何使用Java API来完成这项工作,以及它在实际项目中的应用。 Java提供了一个名为`java.util.zip`的包,...

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

    在Java编程语言中,文件的压缩与解压缩是常见的操作,尤其在数据传输、存储优化以及备份场景下显得尤为重要。本实践主要关注如何使用Java来处理ZIP格式的压缩文件,以下将详细介绍相关知识点。 1. **Java档案API...

    java 实现文件的压缩与解压

    在Java编程语言中,实现文件的压缩和解压是常见的任务,这有助于数据存储和传输。本示例将深入探讨如何使用Java的内置库来处理ZIP格式的压缩和解压缩。`java.util.zip`包提供了必要的类来实现这一功能。 首先,让...

    Java 实现图形化文件解压缩工具(支持加解密哦)

    总之,实现一个Java Swing的图形化文件解压缩工具,支持加解密功能,需要掌握Java的文件I/O、流处理、图形界面设计以及可能的第三方库的使用。这个项目既能锻炼基础编程技能,也能提升对加密算法的理解,对于Java...

    Java实现压缩与解压缩功能源码

    在Java编程语言中,压缩和解压缩文件是常见...总的来说,Java提供的`java.util.zip`包使得在程序中实现文件的压缩和解压缩变得相当简单。通过理解和应用这些类,开发者可以轻松地集成压缩和解压缩功能到自己的项目中。

    Java 项目-java的JAVA文件压缩与解压缩实践.zip

    本项目“Java 项目-java的JAVA文件压缩与解压缩实践.zip”提供了一个实战示例,帮助开发者了解如何在Java中实现这一功能。 首先,我们需要介绍的是Java中的`java.util.zip`包,这个包提供了对ZIP文件格式的支持。在...

    Java 开发JAVA文件压缩与解压缩实践(源代码+论文).rar

    本资源提供了关于Java实现文件压缩与解压缩的源代码和相关论文,旨在帮助开发者深入理解并掌握这一技能。 Java中实现文件压缩通常会用到标准库中的`java.util.zip`包,这个包提供了各种压缩和解压缩的功能。例如,...

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

    Java文件的压缩与解压缩是Java编程中一个实用且常见的技术,主要涉及到Java的I/O流和第三方库如Apache Commons Compress、Java内置的java.util.zip包等。本实践项目结合了源代码和相关论文,提供了深入理解这一主题...

    java文件分割压缩

    5. **压缩与解压缩**:在Java中,`java.util.zip`包提供了对ZIP文件的操作支持。`ZipOutputStream`可以用来创建ZIP文件,将多个小文件合并成一个压缩包;而`ZipInputStream`则可以用来读取和解压缩ZIP文件。在`...

    java实现压缩与解压缩

    Java 实现压缩与解压缩是Java编程中常见的一项任务,主要涉及到I/O流处理和压缩库的使用。本文将深入探讨如何使用Java进行文件的压缩和解压缩操作,以及涉及的相关知识点。 首先,Java标准库提供了`java.util.zip`...

Global site tag (gtag.js) - Google Analytics