package com.guo.zip;
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.OutputStream;
//import java.util.zip.ZipEntry;
//import java.util.zip.ZipOutputStream;
//用ant.jar的zip.*可以解决中文文件名问题
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
/**
* 压缩文件. 2007-10-17 下午11:19:50
*
* @author chenlb
*/
public class RecursiveZip
{
public static void main(String[] args)
{
RecursiveZip recursiveZip = new RecursiveZip();
System.out.println("====开始====");
try
{
OutputStream os = new FileOutputStream("D:/全程利润.zip");
BufferedOutputStream bs = new BufferedOutputStream(os);
ZipOutputStream zo = new ZipOutputStream(bs);
// recursiveZip.zip("e:/recursive-zip/中文文件名.txt", new
// File("e:/recursive-zip"), zo, true, true);
recursiveZip.zip("D:/temp", new File("D:/temp"), zo, true, true);
zo.closeEntry();
zo.close();
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
System.out.println("====完成====");
}
/**
* @param path
* 要压缩的路径, 可以是目录, 也可以是文件.
* @param basePath
* 如果path是目录,它一般为new File(path), 作用是:使输出的zip文件以此目录为根目录,
* 如果为null它只压缩文件, 不解压目录.
* @param zo
* 压缩输出流
* @param isRecursive
* 是否递归
* @param isOutBlankDir
* 是否输出空目录, 要使输出空目录为true,同时baseFile不为null.
* @throws IOException
*/
public void zip(String path, File basePath, ZipOutputStream zo,
boolean isRecursive, boolean isOutBlankDir) throws IOException
{
File inFile = new File(path);
File[] files = new File[0];
if (inFile.isDirectory())
{ // 是目录
files = inFile.listFiles();
}
else if (inFile.isFile())
{ // 是文件
files = new File[1];
files[0] = inFile;
}
byte[] buf = new byte[1024];
int len;
// System.out.println("baseFile: "+baseFile.getPath());
for (int i = 0; i < files.length; i++)
{
String pathName = "";
if (basePath != null)
{
if (basePath.isDirectory())
{
pathName = files[i].getPath().substring(
basePath.getPath().length() + 1);
}
else
{// 文件
pathName = files[i].getPath().substring(
basePath.getParent().length() + 1);
}
}
else
{
pathName = files[i].getName();
}
System.out.println(pathName);
if (files[i].isDirectory())
{
if (isOutBlankDir && basePath != null)
{
zo.putNextEntry(new ZipEntry(pathName + "/")); // 可以使空目录也放进去
}
if (isRecursive)
{ // 递归
zip(files[i].getPath(), basePath, zo, isRecursive,
isOutBlankDir);
}
}
else
{
FileInputStream fin = new FileInputStream(files[i]);
zo.putNextEntry(new ZipEntry(pathName));
while((len = fin.read(buf)) > 0)
{
zo.write(buf, 0, len);
}
fin.close();
}
}
}
}
分享到:
相关推荐
在Java编程语言中,压缩文件或文件目录是一项常见的任务,主要使用了Java的`java.util.zip`包中的类。这个包提供了对ZIP和GZIP格式的支持。本文将深入讲解如何利用Java来直接压缩文件或文件目录,以及如何进行相关的...
在Java编程语言中,压缩文件夹到指定目录和指定名称是一项常见的任务,这通常涉及到对文件系统的操作和使用压缩库。Java提供了多种方法来实现这一功能,比如使用内置的`java.util.zip`包或者第三方库如Apache ...
本文将深入探讨如何使用Java来处理压缩文件,特别是针对标题提及的“java压缩文件以及文件夹”。我们将主要关注`ZipCompressor.java`这个类,它是实现文件和文件夹压缩的核心工具。 首先,让我们了解`java.util.zip...
* @param isCreateDir 是否在压缩文件里创建目录,仅在压缩文件为目录时有效. * 如果为false,将直接压缩目录下文件到压缩文件. * @param passwd 压缩使用的密码 * @return 最终的压缩文件存放的绝对路径,...
### Java压缩文件目录成ZIP包最新技巧 在Java开发中,对文件或目录进行压缩是一项常见且实用的功能。本文将详细介绍如何使用`java.util.zip`包中的类来压缩文件及目录,并解决其中的一个常见问题——中文文件名或...
本文将深入探讨如何使用Java来处理ZIP文件,特别是针对标题所提及的“java 中 zip压缩文件解压工具类”。我们将讨论核心的Java API,如`java.util.zip`包中的类,并通过一个名为`CompressFileUtils`的工具类来展示...
在Java编程语言中,压缩文件是一项常见的任务,用于减少文件的存储空间,提高传输效率。HUFFMAN编码是一种数据压缩算法,它基于字符频率构建一棵最优的二叉树来进行编码,广泛应用于文本压缩。本节将详细介绍如何在...
java批量压缩文件跟文件夹,目前还不支持中文名,后期会改进,谢谢
在压缩文件时,我们需要遍历目标文件或目录,获取所有子文件和子目录。这可以通过递归函数实现,使用`File`类的`listFiles()`方法来获取子文件和子目录的数组。 5. **创建ZipEntry**: 对于每个文件或子目录,...
1. **Java压缩库**:Java标准库提供了`java.util.zip`包,它包含了多种压缩和解压缩的类,如`ZipOutputStream`、`ZipInputStream`、`GZIPOutputStream`和`GZIPInputStream`,用于处理ZIP和GZIP格式的文件。...
Java文件分割压缩是一种常见的操作,尤其在处理大数据或者网络传输时非常有用,因为单个大文件可能会导致处理效率低或传输困难。以下是一些相关的Java编程知识点: 1. **文件I/O操作**:在Java中,`java.io`包提供...
### Java将文件压缩为ZIP的方法 #### 知识点概览 ...理解这些基础知识对于开发人员来说是非常有用的,尤其是在处理大量文件或需要在网络上传输文件时。希望这篇文章能够帮助你更好地理解和使用Java进行文件压缩。
java代码实现单个或多个文件压缩成rar包,本地要安装winRar插件。
1、压缩文件或者目录(只是压缩不删除):zipFileOrDirectory 2、程序自动判断如果是文件那么就是源文件下载,如果是文件夹那么就先 压缩然后再下载,然后再删除:downFileDel 3、不管什么文件都是最后以zip下载:...
然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在压缩和解压过程中能正确保存和读取。 首先,我们要理解ZIP格式本身并...
Java在Linux环境下对GZ压缩文件的处理是一个常见的任务,特别是在处理大文件或者网络传输时。GZ是一种常用的文件压缩格式,它利用了gzip程序进行压缩,而在Java中,我们可以使用`java.util.zip`包中的类来实现对GZ...
java压缩文件的程序代码,可以压缩单个文件夹,单个标准文件,多个标准文件 多个文件夹,以及文件夹和文件混合的压缩代码
2. **压缩文件**: 使用`ZipOutputStream`,你可以将文件或目录添加到ZIP文件中。首先,创建一个`ZipOutputStream`实例,然后通过调用`putNextEntry`方法开始新的`ZipEntry`,接着使用`write`方法写入文件数据,最后...
java 解压缩目录下的所有文件 需要用的ant.jar 可以解决中文乱码问题
工具类中提供的方法有:压缩单个文件,压缩多个文件,解压文件到制定路径下。获取压缩文件的文件列表。压缩文件的文件注释。