转自于站内兄弟的文章:
http://wallimn.iteye.com/blog/566739
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.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
public class ZipToFile {
public static final String ZIP_FILENAME = "C:\\XJPDA.zip";//需要解压缩的文件名
public static final String ZIP_DIR = "C:\\XJPDA\\";//需要压缩的文件夹
public static final String UN_ZIP_DIR = "C:\\";//要解压的文件目录
public static final int BUFFER = 1024 ;//缓存大小
/**
* zip压缩功能.
* 压缩baseDir(文件夹目录)下所有文件,包括子目录
* @throws Exception
*/
public static void zipFile(String baseDir,String fileName) throws Exception{
List fileList=getSubFiles(new File(baseDir));
ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(fileName));
ZipEntry ze=null;
byte[] buf=new byte[BUFFER];
int readLen=0;
for(int i = 0; i <fileList.size(); i++) {
File f=(File)fileList.get(i);
ze=new ZipEntry(getAbsFileName(baseDir, f));
ze.setSize(f.length());
ze.setTime(f.lastModified());
zos.putNextEntry(ze);
InputStream is=new BufferedInputStream(new FileInputStream(f));
while ((readLen=is.read(buf, 0, BUFFER))!=-1) {
zos.write(buf, 0, readLen);
}
is.close();
}
zos.close();
}
/**
* 给定根目录,返回另一个文件名的相对路径,用于zip文件中的路径.
* @param baseDir java.lang.String 根目录
* @param realFileName java.io.File 实际的文件名
* @return 相对文件名
*/
private static String getAbsFileName(String baseDir, File realFileName){
File real=realFileName;
File base=new File(baseDir);
String ret=real.getName();
while (true) {
real=real.getParentFile();
if(real==null)
break;
if(real.equals(base))
break;
else
ret=real.getName()+"/"+ret;
}
return ret;
}
/**
* 取得指定目录下的所有文件列表,包括子目录.
* @param baseDir File 指定的目录
* @return 包含java.io.File的List
*/
private static List getSubFiles(File baseDir){
List ret=new ArrayList();
File[] tmp=baseDir.listFiles();
for (int i = 0; i <tmp.length; i++) {
if(tmp[i].isFile())
ret.add(tmp[i]);
if(tmp[i].isDirectory())
ret.addAll(getSubFiles(tmp[i]));
}
return ret;
}
/**
* 解压缩功能.
* 将ZIP_FILENAME文件解压到ZIP_DIR目录下.
* @throws Exception
*/
public static void upZipFile() throws Exception{
ZipFile zfile=new ZipFile(ZIP_FILENAME);
Enumeration zList=zfile.entries();
ZipEntry ze=null;
byte[] buf=new byte[1024];
while(zList.hasMoreElements()){
ze=(ZipEntry)zList.nextElement();
if(ze.isDirectory()){
File f=new File(ZIP_DIR+ze.getName());
f.mkdir();
continue;
}
OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(ZIP_DIR, ze.getName())));
InputStream is=new BufferedInputStream(zfile.getInputStream(ze));
int readLen=0;
while ((readLen=is.read(buf, 0, 1024))!=-1) {
os.write(buf, 0, readLen);
}
is.close();
os.close();
}
zfile.close();
}
/**
* 给定根目录,返回一个相对路径所对应的实际文件名.
* @param baseDir 指定根目录
* @param absFileName 相对路径名,来自于ZipEntry中的name
* @return java.io.File 实际的文件
*/
public static File getRealFileName(String baseDir, String absFileName){
String[] dirs=absFileName.split("/");
File ret=new File(baseDir);
if(dirs.length>1){
for (int i = 0; i < dirs.length-1;i++) {
ret=new File(ret, dirs[i]);
}
if(!ret.exists())
ret.mkdirs();
ret=new File(ret, dirs[dirs.length-1]);
return ret;
}
return ret;
}
}
不过上面存在中文问题
是因为java.util.zip下的格式转换有问题
将
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
改成
import org.apache.tools.zip.*;
即可!
apache里修正了这一现象。
分享到:
相关推荐
java实现霍夫曼(huffman)树的压缩和解压缩,支持对文档的压缩和解压缩
这些文件可以帮助我们进一步理解和学习如何在Java环境中实现哈夫曼编码的压缩和解压缩功能。如果你想要深入学习或实践,可以下载这个压缩包,阅读代码,并尝试运行它们来观察压缩和解压缩的效果。
本文将深入探讨如何使用Java API来处理ZIP文件格式的压缩和解压缩操作。 首先,我们要了解Java标准库中的`java.util.zip`包,这个包提供了对ZIP文件格式的支持。主要涉及的类有`ZipEntry`和`ZipOutputStream`用于...
Java编程语言提供了强大的文件压缩和解压缩功能,主要通过java.util.zip包中的类来实现,如ZipOutputStream用于压缩,ZipInputStream用于解压缩。本篇将深入探讨这些关键类的使用方法,以及在Java中处理ZIP文件的...
在标题中提到的"java实现对文件或文件夹的压缩和解压缩",我们可以使用这个库来实现。具体来说,我们可以创建一个`ZipUtil`类,里面包含压缩和解压缩的静态方法。 首先,为了压缩文件或文件夹,我们需要使用`org....
Java的`java.util.zip`包提供了压缩和解压缩的基础工具类,如`ZipOutputStream`、`ZipEntry`等。这些类可以用来创建ZIP格式的压缩文件。`ZipOutputStream`是实现文件压缩的关键类之一,它可以将多个文件写入到一个...
总之,Java提供了一套完整的API来处理文件的压缩和解压缩,无论是基础的ZIP和GZIP,还是通过第三方库实现的更多压缩格式。在实际开发中,了解并掌握这些工具和技巧对于优化文件存储和传输效率至关重要。
这里我们将深入探讨如何使用Java实现这一功能,主要关注ZIP文件格式的压缩和解压缩。 首先,Java标准库提供了一个名为`java.util.zip`的包,它包含了处理压缩文件所需的类。其中,`ZipOutputStream`用于创建ZIP文件...
在Java编程语言中,我们可以利用内置的`java.util.zip`包来实现文件的压缩和解压缩功能。这个包提供了一系列的类,如`ZipOutputStream`用于创建ZIP压缩文件,`ZipInputStream`则用于读取和解压缩ZIP文件。在本教程中...
压缩和解压缩过程中,需要将普通流转换为压缩流,以实现数据的压缩和解压缩。 7. **递归处理**:在压缩或解压缩整个目录时,通常需要递归处理子目录和其下的所有文件。这涉及到文件系统遍历和递归函数的使用。 8. ...
在Java编程环境中,APK文件是Android应用的安装包,通常是`.apk`格式,它包含了应用的所有资源、代码和配置信息。本实例将探讨如何利用...总之,Java提供的`java.util.zip`库为处理压缩和解压缩任务提供了强大的支持。
在Java编程中,实现文件的压缩和解压缩是一项常见的任务,这通常涉及到对`java.util.zip`包的使用。`ZipOutputStream`和`ZipInputStream`是Java标准库提供的两个关键类,它们分别用于文件的压缩和解压缩。然而,需要...
该Java源代码实现了LZMA算法的压缩和解压缩过程,提供了一个完整的LZMA算法实现。 结论 该Java源代码实现了LZMA算法的核心逻辑,包括压缩和解压缩的实现。源代码中定义了多个常量和函数,用于控制压缩和解压缩的...
在`GzipUtils.java`和`ZipUtils.java`中,作者可能实现了一些功能,如压缩和解压缩的方法。这些方法可能使用了Java内置的`java.util.zip`包,其中`GZIPOutputStream`和`GZIPInputStream`对应Gzip操作,而`...
本程序实现了利用 Huffman 编码对图像进行无损压缩和解压缩。Huffman 编码是一种基于字符出现频率构建相应前缀码的无损数据压缩算法。 使用方法: 1. 需要安装 OpenCV 和 Numpy 库: pip install opencv-python ...
在Java编程语言中,实现文件的压缩和解压缩是一项常见的任务,特别是在开发Web应用程序时。本文将深入探讨如何使用Java API来完成这项工作,以及它在实际项目中的应用。 Java提供了一个名为`java.util.zip`的包,...
本篇文章将详细探讨如何使用Java内置的类库来实现ZIP文件的压缩和解压缩,以及解决中文文件名出现乱码的问题。 首先,我们要了解Java中处理ZIP文件的核心类:`java.util.zip.ZipOutputStream` 和 `java.util.zip....
以上就是`FileUtil.java`文件中可能实现RAR压缩和解压缩的核心代码片段。通过结合Apache Commons Compress库,开发者可以轻松地在Java应用程序中处理RAR格式的压缩和解压缩任务。这个库不仅支持RAR,还支持其他多种...
在提供的压缩包子文件“HuffmanCoding”中,可能包含了实现Huffman压缩和解压缩的Java源代码。通过阅读和理解这些代码,可以深入了解Huffman编码的具体实现细节。同时,可以尝试修改和优化代码,比如增加对二进制...
在Java编程语言中,压缩和解压缩文件是常见的任务,特别是在处理大量数据或者需要在网络上传输数据时。本文将深入探讨如何使用Java实现这一功能,主要关注两种常用的压缩格式:ZIP和GZ。 首先,我们要引入Java的...