- 浏览: 38338 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
SwordShadow:
谢谢博主,写的不错
js判断上传文件的类型 -
icolorfulday:
今天我也正好碰到这样的错误,请问楼主解决了这个问题了么?
Struts2下载时出现错误 -
ocaicai:
pkfajax 写道感觉这些判断都不是很严谨,要是用户新建一个 ...
js判断上传文件的类型 -
yuer_Java:
rar 解压有问题//
java解压zip与rar -
goingshow:
zip中文解压出来,没有问题 但是我们显示出它的名称就 ...
java解压zip与rar
package com.xxx.decompression; 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.util.List; import org.apache.tools.tar.TarEntry; import org.apache.tools.tar.TarOutputStream; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; import de.innosystec.unrar.Archive; import de.innosystec.unrar.exception.RarException; import de.innosystec.unrar.rarfile.FileHeader; /** * @author Every E-mail/MSN:mwgjkf@hotmail.com * QQ:30130942 * @version 创建时间:Feb 26, 2009 6:01:11 PM * 类说明:压缩、解压文件公用类 * */ public class Decompression { private static final int BUFFEREDSIZE = 1024; public Decompression() { // TODO Auto-generated constructor stub } /** * 解压zip格式的压缩文件到当前文件夹 * @param zipFileName * @throws Exception */ @SuppressWarnings("unchecked") public synchronized void unzipFile(String zipFileName) throws Exception { try { File f = new File(zipFileName); ZipFile zipFile = new ZipFile(zipFileName); if((!f.exists()) && (f.length() <= 0)) { throw new Exception("要解压的文件不存在!"); } String strPath, gbkPath, strtemp; File tempFile = new File(f.getParent()); strPath = tempFile.getAbsolutePath(); java.util.Enumeration e = zipFile.getEntries(); while(e.hasMoreElements()){ org.apache.tools.zip.ZipEntry zipEnt = (ZipEntry) e.nextElement(); gbkPath=zipEnt.getName(); if(zipEnt.isDirectory()){ strtemp = strPath + "/" + gbkPath; File dir = new File(strtemp); dir.mkdirs(); continue; } else { //读写文件 InputStream is = zipFile.getInputStream(zipEnt); BufferedInputStream bis = new BufferedInputStream(is); gbkPath=zipEnt.getName(); strtemp = strPath + "/" + gbkPath; //建目录 String strsubdir = gbkPath; for(int i = 0; i < strsubdir.length(); i++) { if(strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) { String temp = strPath + "/" + strsubdir.substring(0, i); File subdir = new File(temp); if(!subdir.exists()) subdir.mkdir(); } } FileOutputStream fos = new FileOutputStream(strtemp); BufferedOutputStream bos = new BufferedOutputStream(fos); int c; while((c = bis.read()) != -1) { bos.write((byte) c); } bos.close(); fos.close(); } } } catch(Exception e) { e.printStackTrace(); throw e; } } /** * 解压zip格式的压缩文件到指定位置 * @param zipFileName 压缩文件 * @param extPlace 解压目录 * @throws Exception */ @SuppressWarnings("unchecked") public synchronized void unzip(String zipFileName, String extPlace) throws Exception { try { (new File(extPlace)).mkdirs(); File f = new File(zipFileName); ZipFile zipFile = new ZipFile(zipFileName); if((!f.exists()) && (f.length() <= 0)) { throw new Exception("要解压的文件不存在!"); } String strPath, gbkPath, strtemp; File tempFile = new File(extPlace); strPath = tempFile.getAbsolutePath(); java.util.Enumeration e = zipFile.getEntries(); while(e.hasMoreElements()){ org.apache.tools.zip.ZipEntry zipEnt = (ZipEntry) e.nextElement(); gbkPath=zipEnt.getName(); if(zipEnt.isDirectory()){ strtemp = strPath + File.separator + gbkPath; File dir = new File(strtemp); dir.mkdirs(); continue; } else { //读写文件 InputStream is = zipFile.getInputStream(zipEnt); BufferedInputStream bis = new BufferedInputStream(is); gbkPath=zipEnt.getName(); strtemp = strPath + File.separator + gbkPath; //建目录 String strsubdir = gbkPath; for(int i = 0; i < strsubdir.length(); i++) { if(strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) { String temp = strPath + File.separator + strsubdir.substring(0, i); File subdir = new File(temp); if(!subdir.exists()) subdir.mkdir(); } } FileOutputStream fos = new FileOutputStream(strtemp); BufferedOutputStream bos = new BufferedOutputStream(fos); int c; while((c = bis.read()) != -1) { bos.write((byte) c); } bos.close(); fos.close(); } } } catch(Exception e) { e.printStackTrace(); throw e; } } /** * 解压zip格式的压缩文件到指定位置 * @param zipFileName 压缩文件 * @param extPlace 解压目录 * @throws Exception */ @SuppressWarnings("unchecked") public synchronized void unzip(String zipFileName, String extPlace,boolean whether) throws Exception { try { (new File(extPlace)).mkdirs(); File f = new File(zipFileName); ZipFile zipFile = new ZipFile(zipFileName); if((!f.exists()) && (f.length() <= 0)) { throw new Exception("要解压的文件不存在!"); } String strPath, gbkPath, strtemp; File tempFile = new File(extPlace); strPath = tempFile.getAbsolutePath(); java.util.Enumeration e = zipFile.getEntries(); while(e.hasMoreElements()){ org.apache.tools.zip.ZipEntry zipEnt = (ZipEntry) e.nextElement(); gbkPath=zipEnt.getName(); if(zipEnt.isDirectory()){ strtemp = strPath + File.separator + gbkPath; File dir = new File(strtemp); dir.mkdirs(); continue; } else { //读写文件 InputStream is = zipFile.getInputStream(zipEnt); BufferedInputStream bis = new BufferedInputStream(is); gbkPath=zipEnt.getName(); strtemp = strPath + File.separator + gbkPath; //建目录 String strsubdir = gbkPath; for(int i = 0; i < strsubdir.length(); i++) { if(strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) { String temp = strPath + File.separator + strsubdir.substring(0, i); File subdir = new File(temp); if(!subdir.exists()) subdir.mkdir(); } } FileOutputStream fos = new FileOutputStream(strtemp); BufferedOutputStream bos = new BufferedOutputStream(fos); int c; while((c = bis.read()) != -1) { bos.write((byte) c); } bos.close(); fos.close(); } } } catch(Exception e) { e.printStackTrace(); throw e; } } /** * 压缩zip格式的压缩文件 * @param inputFilename 压缩的文件或文件夹及详细路径 * @param zipFilename 输出文件名称及详细路径 * @throws IOException */ public synchronized void zip(String inputFilename, String zipFilename) throws IOException { zip(new File(inputFilename), zipFilename); } /** * 压缩zip格式的压缩文件 * @param inputFile 需压缩文件 * @param zipFilename 输出文件及详细路径 * @throws IOException */ public synchronized void zip(File inputFile, String zipFilename) throws IOException { ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFilename)); try { zip(inputFile, out, ""); } catch (IOException e) { throw e; } finally { out.close(); } } /** * 压缩zip格式的压缩文件 * @param inputFile 需压缩文件 * @param out 输出压缩文件 * @param base 结束标识 * @throws IOException */ @SuppressWarnings("unused") private synchronized void zip(File inputFile, ZipOutputStream out, String base) throws IOException { if (inputFile.isDirectory()) { File[] inputFiles = inputFile.listFiles(); out.putNextEntry(new ZipEntry(base + "/")); base = base.length() == 0 ? "" : base + "/"; for (int i = 0; i < inputFiles.length; i++) { zip(inputFiles[i], out, base + inputFiles[i].getName()); } } else { if (base.length() > 0) { out.putNextEntry(new ZipEntry(base)); } else { out.putNextEntry(new ZipEntry(inputFile.getName())); } FileInputStream in = new FileInputStream(inputFile); try { int c; byte[] by = new byte[BUFFEREDSIZE]; while ((c = in.read(by)) != -1) { out.write(by, 0, c); } } catch (IOException e) { throw e; } finally { in.close(); } } } /** * 解压tar格式的压缩文件到指定目录下 * @param tarFileName 压缩文件 * @param extPlace 解压目录 * @throws Exception */ public synchronized void untar(String tarFileName, String extPlace) throws Exception{ } /** * 压缩tar格式的压缩文件 * @param inputFilename 压缩文件 * @param tarFilename 输出路径 * @throws IOException */ public synchronized void tar(String inputFilename, String tarFilename) throws IOException{ tar(new File(inputFilename), tarFilename); } /** * 压缩tar格式的压缩文件 * @param inputFile 压缩文件 * @param tarFilename 输出路径 * @throws IOException */ public synchronized void tar(File inputFile, String tarFilename) throws IOException{ TarOutputStream out = new TarOutputStream(new FileOutputStream(tarFilename)); try { tar(inputFile, out, ""); } catch (IOException e) { throw e; } finally { out.close(); } } /** * 压缩tar格式的压缩文件 * @param inputFile 压缩文件 * @param out 输出文件 * @param base 结束标识 * @throws IOException */ @SuppressWarnings("unused") private synchronized void tar(File inputFile, TarOutputStream out, String base) throws IOException { if (inputFile.isDirectory()) { File[] inputFiles = inputFile.listFiles(); out.putNextEntry(new TarEntry(base + "/")); base = base.length() == 0 ? "" : base + "/"; for (int i = 0; i < inputFiles.length; i++) { tar(inputFiles[i], out, base + inputFiles[i].getName()); } } else { if (base.length() > 0) { out.putNextEntry(new TarEntry(base)); } else { out.putNextEntry(new TarEntry(inputFile.getName())); } FileInputStream in = new FileInputStream(inputFile); try { int c; byte[] by = new byte[BUFFEREDSIZE]; while ((c = in.read(by)) != -1) { out.write(by, 0, c); } } catch (IOException e) { throw e; } finally { in.close(); } } } /** * 解压rar格式的压缩文件到指定目录下 * @param rarFileName 压缩文件 * @param extPlace 解压目录 * @throws Exception */ public synchronized void unrarFile(String rarFileName, String extPlace) throws Exception{ try{ Archive rar = new Archive(new File(rarFileName)); FileHeader fh = rar.nextFileHeader(); while(fh != null){ System.out.println("fh.name="+fh.getFileNameString()); File out = new File(extPlace,fh.getFileNameString()); FileOutputStream os = new FileOutputStream(out); rar.extractFile(fh, os); os.close(); fh=rar.nextFileHeader(); } }catch(Exception e){ e.printStackTrace(); } } /** * 解压rar格式的压缩文件到指定目录下 * @param rarFileName 压缩文件 * @param extPlace 解压目录 * @param repeatFile 重复路径 * @throws Exception * @author Every */ @SuppressWarnings("unchecked") public synchronized void unrar(String rarFileName, String extPlace,List repeatFile) throws Exception{ File f = new File(rarFileName); FileOutputStream os=null; Archive a=null; try { a = new Archive(f); } catch (RarException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } extPlace=(extPlace==null||extPlace.trim().equals(""))?f.getParent()+File.separator+f.getName().replace(".", "#").split("#")[0]:extPlace; // System.out.println(extPlace); File ext=new File(extPlace); if(!ext.exists()){ ext.mkdirs(); } if(a!=null){ a.getMainHeader().print(); FileHeader fh = a.nextFileHeader(); while(fh!=null){ try { File out = new File(extPlace+File.separator+fh.getFileNameString().trim()); if (out.exists()&&repeatFile!=null) { File rFile=new File(extPlace+File.separator+"tempFile"); if(rFile.exists())rFile.mkdirs(); repeatFile.add(fh.getFileNameString().trim()); out=new File(extPlace+File.separator+"tempFile"+File.separator+fh.getFileNameString().trim()); os = new FileOutputStream(out); }else{ os = new FileOutputStream(out); } a.extractFile(fh, os); os.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (RarException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } fh=a.nextFileHeader(); } } } /** * 解压rar格式的压缩文件到当前文件所在目录下 * @param rarFileName 压缩文件 * @param repeatFile 重复路径 * @throws Exception * @author Every */ @SuppressWarnings("unchecked") public synchronized void unrar(String rarFileName,List repeatFile) throws Exception{ unrar(rarFileName,null,repeatFile); } /** * 解压rar格式的压缩文件到指定目录下 * @param rarFileName 压缩文件 * @param extPlace 解压目录 * @throws Exception * @author Every */ public synchronized void unrar(String rarFileName,String extPlace) throws Exception{ unrar(rarFileName,extPlace,null); } /** * 解压rar格式的压缩文件到当前文件所在目录下 * @param rarFileName 压缩文件 * @param delete 是否删除源文件 * @throws Exception * @author Every */ public synchronized void unrar(String rarFileName) throws Exception{ unrar(rarFileName,null,null); } /** * 执行实例 * @param args */ // public static void main(String[] args) throws Exception { // Decompression decompression=new Decompression(); // decompression.unzipFile("c:/test.zip"); // decompression.unzip("c:/test.zip","c:/test22"); // decompression.zip("c:/test22", "c:/test222.zip"); // decompression.unrar("c:/tests.rar",null,new ArrayList()); // } }
- java-unrar.zip (505.9 KB)
- 下载次数: 62
- ant.jar.zip (1.2 MB)
- 下载次数: 33
评论
3 楼
yuer_Java
2011-08-15
rar 解压有问题//
2 楼
goingshow
2011-04-14
zip中文解压出来,没有问题 但是我们显示出它的名称就乱码了
1 楼
goingshow
2011-04-12
不错哦,拿去用了
相关推荐
在Java编程环境中,上传并...通过结合标准库和第三方库,我们可以构建一个功能完备的文件处理系统,满足上传、解压ZIP和RAR文件的需求。记得在实际开发中根据项目需求进行适当的调整和优化,确保系统的稳定性和效率。
NULL 博文链接:https://aben328.iteye.com/blog/671936
以下是一个简单的解压Zip文件的例子: ```java import java.io.*; import java.util.zip.*; public class ZipExtractor { public static void extractZip(String zipFilePath, String outputDirectory) throws ...
本文将深入探讨如何使用Java实现ZIP和RAR类型的压缩与解压操作,以及相关知识点。 首先,我们来看ZIP文件格式。ZIP是一种广泛使用的文件压缩格式,其在Java中的处理主要通过`java.util.zip`包。这个包提供了多个类...
在Java中,处理.zip、.rar和.7z等压缩格式通常需要借助第三方库,因为Java标准库JDK并不直接支持这些格式。本文将详细介绍如何使用特定的jar包来实现对这三种压缩格式的操作。 首先,.zip格式是Java标准库支持的,...
在Java编程环境中,解压缩ZIP或RAR格式的文件是一项常见的任务,这主要涉及到I/O流、文件操作以及压缩和解压缩库的使用。本篇将深入讲解如何在Java中实现这个功能,同时会介绍一些相关的工具和源码。 首先,对于ZIP...
在Java编程环境中,解压ZIP和RAR文件是常见的任务,特别是在处理数据传输、备份或集成系统时。本文将深入探讨如何使用Java实现这一功能,并提供详细的步骤和代码示例。 首先,我们来看如何使用Java来解压ZIP文件。...
java ZIP和RAR 压缩包 目录结构。 1.ant.jar 解决java自带zip不能读取中文压缩包的问题; 2.需要安装WINRAR软件,以便解压rar文件,然后获取对应目录; 3.实现在线预览压缩包目录结构的功能;
使用`java.util.zip`包中的`ZipInputStream`和`ZipEntry`类,可以读取并解压ZIP文件。以下是一个基本的解压流程: - 创建`ZipInputStream`实例,传入文件输入流。 - 循环遍历`ZipInputStream`的`ZipEntry`,获取...
本篇将详细讲解如何使用Java来解压ZIP和RAR文件。 首先,我们关注ZIP文件。Java标准库(Java SE)自带了`java.util.zip`包,提供了对ZIP文件的支持。`ZipInputStream`和`ZipEntry`是这个包中的核心类,用于读取和...
1. **Java解压ZIP文件**: - Java标准库提供了`java.util.zip`包,其中包含了解压缩ZIP文件所需的所有类。主要使用`ZipInputStream`和`ZipEntry`两个类。 - `ZipInputStream`是一个字节流,可以从输入流中读取ZIP...
java解压zip或rar压缩文件 包括源码和所需要的jar包:apache ant.jar 和 java-unrar-0.3.jar zip文件解压(要使用apache ant.jar以处理中文乱码) rar文件解压(要使用java-unrar-0.3.jar) 具有处理中文乱码功能 代码...
以下是一个简单的Java代码示例,展示如何解压zip文件: ```java import java.io.*; import java.util.zip.*; public class ZipExtractor { public static void main(String[] args) { String zipFilePath = ...
总结来说,Java中解压ZIP文件主要依赖`java.util.zip`包,而RAR文件则需要借助如Apache Commons Compress这样的第三方库。解压过程涉及到读取压缩文件流,创建文件或目录,以及将数据从输入流复制到输出流。这两个...
这个例子展示了如何使用Apache Commons Compress库来解压RAR文件,原理与解压ZIP文件类似,只是使用的类和接口不同。 总的来说,Java处理RAR和ZIP文件的核心在于理解文件流和压缩流的概念,以及如何利用对应的API...
### Java对ZIP、RAR文件的压缩与解压缩技术解析 #### 概述 在实际开发过程中,文件的压缩与解压缩是一项非常常见的需求。本文将详细介绍如何使用Java语言实现ZIP和RAR格式文件的压缩与解压缩操作。文章通过具体的...
Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面,我们将详细介绍如何使用Java...
1. **Java ZIP压缩与解压缩**: Java内置的`java.util.zip`包提供了处理ZIP文件的功能。`ZipOutputStream`用于创建ZIP文件,而`ZipInputStream`则用于读取和解压。你可以通过遍历文件或目录,创建`ZipEntry`对象并...
Java中递归逻辑循环调用解压zip里面所有的压缩包 Java中递归逻辑循环调用解压zip里面所有的压缩包