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();
}
}
}
相关推荐
4. **源代码实现**:实践中提供的源代码展示了如何使用Java API来实现文件和目录的压缩与解压缩。这可能包括读取文件,创建压缩流,写入数据到压缩流,以及从压缩流中读取和写入文件等步骤。 5. **文件操作**:在...
在Java编程语言中,我们可以利用内置的`java.util.zip`包来实现文件的压缩和解压缩功能。这个包提供了一系列的类,如`ZipOutputStream`用于创建ZIP压缩文件,`ZipInputStream`则用于读取和解压缩ZIP文件。在本教程中...
在Java编程语言中,处理...通过以上这些知识点,你可以构建一个强大的Java工具类,实现ZIP和RAR文件的压缩与解压缩,包括处理加密的ZIP文件。这个工具类可以是项目中一个可靠的助手,提高代码的可重用性和可维护性。
本文将深入探讨如何实现文件的解压缩功能,特别是针对zip文件格式的处理。我们将基于Java编程语言,以`MyZip.java`这个文件作为示例,来详细讲解相关的编程知识。 首先,我们要理解zip文件格式。ZIP是一种广泛使用...
8. **性能优化**:在处理大量文件时,可以考虑使用多线程来并行压缩或解压缩,以提高效率。然而,这会增加代码的复杂性,需要谨慎处理同步问题。 以上是关于Java实现带密码的ZIP文件压缩和解压的基本概念和实现细节...
在本项目中,我们主要探讨的是如何利用Java编程语言实现文件的压缩与解压缩功能。这个实践项目包含源代码和相关的论文,对于初级到进阶的Java开发者,或者是正在寻求毕业设计、课程设计、大作业或者工程实训项目的...
这个实践项目旨在利用Java编程语言实现文件的压缩与解压缩功能,为用户提供一个高效、稳定且易于使用的文件处理工具。 源代码部分包含了完整的Java实现代码,包括压缩和解压缩两个主要功能。在压缩方面,代码使用了...
在Java编程语言中,实现文件的压缩和解压缩是一项常见的任务,特别是在开发Web应用程序时。本文将深入探讨如何使用Java API来完成这项工作,以及它在实际项目中的应用。 Java提供了一个名为`java.util.zip`的包,...
在Java编程语言中,文件的压缩与解压缩是常见的操作,尤其在数据传输、存储优化以及备份场景下显得尤为重要。本实践主要关注如何使用Java来处理ZIP格式的压缩文件,以下将详细介绍相关知识点。 1. **Java档案API...
在Java编程语言中,实现文件的压缩和解压是常见的任务,这有助于数据存储和传输。本示例将深入探讨如何使用Java的内置库来处理ZIP格式的压缩和解压缩。`java.util.zip`包提供了必要的类来实现这一功能。 首先,让...
总之,实现一个Java Swing的图形化文件解压缩工具,支持加解密功能,需要掌握Java的文件I/O、流处理、图形界面设计以及可能的第三方库的使用。这个项目既能锻炼基础编程技能,也能提升对加密算法的理解,对于Java...
在Java编程语言中,压缩和解压缩文件是常见...总的来说,Java提供的`java.util.zip`包使得在程序中实现文件的压缩和解压缩变得相当简单。通过理解和应用这些类,开发者可以轻松地集成压缩和解压缩功能到自己的项目中。
本项目“Java 项目-java的JAVA文件压缩与解压缩实践.zip”提供了一个实战示例,帮助开发者了解如何在Java中实现这一功能。 首先,我们需要介绍的是Java中的`java.util.zip`包,这个包提供了对ZIP文件格式的支持。在...
本资源提供了关于Java实现文件压缩与解压缩的源代码和相关论文,旨在帮助开发者深入理解并掌握这一技能。 Java中实现文件压缩通常会用到标准库中的`java.util.zip`包,这个包提供了各种压缩和解压缩的功能。例如,...
Java文件的压缩与解压缩是Java编程中一个实用且常见的技术,主要涉及到Java的I/O流和第三方库如Apache Commons Compress、Java内置的java.util.zip包等。本实践项目结合了源代码和相关论文,提供了深入理解这一主题...
5. **压缩与解压缩**:在Java中,`java.util.zip`包提供了对ZIP文件的操作支持。`ZipOutputStream`可以用来创建ZIP文件,将多个小文件合并成一个压缩包;而`ZipInputStream`则可以用来读取和解压缩ZIP文件。在`...
Java 实现压缩与解压缩是Java编程中常见的一项任务,主要涉及到I/O流处理和压缩库的使用。本文将深入探讨如何使用Java进行文件的压缩和解压缩操作,以及涉及的相关知识点。 首先,Java标准库提供了`java.util.zip`...