展开全部

java.util.zip.*这个包下有ZipInputStream和ZipOutputStream这两个类,用于ZIP的读入解压,和生成ZIP文件的打包。

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;

import java.util.zip.GZIPInputStream;

import java.io.DataInputStream;

/**

* Description: 此类用于...

*

* @author wunaigang(2005-6-21)

* @version 1.0.0

*/

public class ZipManager {

/**

* zip压缩62616964757a686964616fe4b893e5b19e31333264653361功能测试. 将d:\\temp\\zipout目录下的所有文件连同子目录压缩到d:\\temp\\out.zip.

*

* @param baseDir 所要压缩的目录名(包含绝对路径)

* @param objFileName 压缩后的文件名

* @throws Exception

*/

public void createZip(String baseDir, String objFileName) throws Exception {

File folderObject = new File(baseDir);

if (folderObject.exists()){

List fileList = getSubFiles(new File(baseDir));

//压缩文件名

ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(objFileName));

ZipEntry ze = null;

byte[] buf = new byte[1024];

int readLen = 0;

for (int i = 0; i < fileList.size(); i++) {

File f = (File) fileList.get(i);

System.out.println("Adding: " + f.getPath() + f.getName());

//创建一个ZipEntry,并设置Name和其它的一些属性

ze = new ZipEntry(getAbsFileName(baseDir, f));

ze.setSize(f.length());

ze.setTime(f.lastModified());

//将ZipEntry加到zos中,再写入实际的文件内容

zos.putNextEntry(ze);

InputStream is = new BufferedInputStream(new FileInputStream(f));

while ((readLen = is.read(buf, 0, 1024)) != -1) {

zos.write(buf, 0, readLen);

}

is.close();

System.out.println("done...");

}

zos.close();

}else{

throw new Exception("this folder isnot exist!");

}

}

/**

* zip压缩功能测试. 将指定文件压缩后存到一压缩文件中

*

* @param baseDir 所要压缩的文件名

* @param objFileName 压缩后的文件名

* @return 压缩后文件的大小

* @throws Exception

*/

public long createFileToZip(String zipFilename,String sourceFileName) throws Exception {

File sourceFile = new File(sourceFileName);

byte[] buf = new byte[1024];

//压缩文件名

File objFile = new File(zipFilename);

ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(objFile));

ZipEntry ze = null;

//创建一个ZipEntry,并设置Name和其它的一些属性

ze = new ZipEntry(sourceFile.getName());

ze.setSize(sourceFile.length());

ze.setTime(sourceFile.lastModified());

//将ZipEntry加到zos中,再写入实际的文件内容

zos.putNextEntry(ze);

InputStream is = new BufferedInputStream(new FileInputStream(sourceFile));

int readLen = -1;

while ((readLen = is.read(buf, 0, 1024)) != -1) {

zos.write(buf, 0, readLen);

}

is.close();

zos.close();

return objFile.length();

}

/**

* zip压缩功能测试. 将指定文件压缩后存到一压缩文件中

*

* @param baseDir 所要压缩的文件名

* @param objFileName 压缩后的文件名

* @return 压缩后文件的大小

* @throws Exception

*/

public long createFileToZip(File sourceFile,File zipFile)throws IOException {

byte[] buf = new byte[1024];

//压缩文件名

File objFile = zipFile;

ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(objFile));

ZipEntry ze = null;

//创建一个ZipEntry,并设置Name和其它的一些属性

ze = new ZipEntry(sourceFile.getName());

ze.setSize(sourceFile.length());

ze.setTime(sourceFile.lastModified());

//将ZipEntry加到zos中,再写入实际的文件内容

zos.putNextEntry(ze);

InputStream is = new BufferedInputStream(new FileInputStream(sourceFile));

int readLen = -1;

while ((readLen = is.read(buf, 0, 1024)) != -1) {

zos.write(buf, 0, readLen);

}

is.close();

zos.close();

return objFile.length();

}

/**

* 测试解压缩功能. 将d:\\download\\test.zip连同子目录解压到d:\\temp\\zipout目录下.

*

* @throws Exception

*/

public void releaseZipToFile(String sourceZip, String outFileName)

throws IOException{

ZipFile zfile=new ZipFile(sourceZip);

System.out.println(zfile.getName());

Enumeration zList=zfile.entries();

ZipEntry ze=null;

byte[] buf=new byte[1024];

while(zList.hasMoreElements()){

//从ZipFile中得到一个ZipEntry

ze=(ZipEntry)zList.nextElement();

if(ze.isDirectory()){

continue;

}

//以ZipEntry为参数得到一个InputStream,并写到OutputStream中

OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(outFileName, 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();

System.out.println("Extracted: "+ze.getName());

}

zfile.close();

}

/**

* 取得指定目录下的所有文件列表,包括子目录.

*

* @param baseDir

* File 指定的目录

* @return 包含java.io.File的List

*/

private List getSubFiles(File baseDir) {

List ret = new ArrayList();

//File base=new File(baseDir);

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;

}

/**

* 给定根目录,返回一个相对路径所对应的实际文件名.

*

* @param baseDir

* 指定根目录

* @param absFileName

* 相对路径名,来自于ZipEntry中的name

* @return java.io.File 实际的文件

*/

private File getRealFileName(String baseDir, String absFileName) {

String[] dirs = absFileName.split("/");

//System.out.println(dirs.length);

File ret = new File(baseDir);

//System.out.println(ret);

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;

}

/**

* 给定根目录,返回另一个文件名的相对路径,用于zip文件中的路径.

*

* @param baseDir

* java.lang.String 根目录

* @param realFileName

* java.io.File 实际的文件名

* @return 相对文件名

*/

private 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;

}

}

System.out.println("TTTTT" + ret);

return ret;

}

public void testReadZip() throws Exception{

String baseDir="d:\\temp\\zipout";

ZipFile zfile=new ZipFile("d:\\download\\src.zip");

System.out.println(zfile.getName());

Enumeration zList=zfile.entries();

ZipEntry ze=null;

byte[] buf=new byte[1024];

while(zList.hasMoreElements()){

//从ZipFile中得到一个ZipEntry

ze=(ZipEntry)zList.nextElement();

if(ze.isDirectory()){

continue;

}

//以ZipEntry为参数得到一个InputStream,并写到OutputStream中

OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(baseDir, 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();

System.out.println("Extracted: "+ze.getName());

}

zfile.close();

}

public static void main(String args[]){

ZipManager manager = new ZipManager();

try {

//manager.releaseZipToFile("c:\\test.zip","c:\\test");

manager.testReadZip();

}

catch (Exception e) {}

System.out.println("over");

}

}

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

java读取rar_java怎么读取Zip和RAR里面的文件啊?相关推荐

  1. linux 压缩7z文件夹,Linux 下压缩与解压.zip和.rar及.7z文件

    Linux 下压缩与解压.zip和.rar及.7z文件对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压它们: 1)对于.zip linux下提供了zip和unzip程 ...

  2. Java解压上传zip或rar文件,并解压遍历文件中的html的路径

    1.本文只提供了一个功能的代码 public String addFreeMarker() throws Exception {HttpSession session = request.getSes ...

  3. zip、rar解压文件

    1.添加zip.rar依赖 <!-- 解压rar --> <dependency><groupId>com.github.junrar</groupId> ...

  4. linux解压7z文件,Linux 下压缩与解压.zip和.rar及.7z文件

    对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压它们: 1)对于.zip linux下提供了zip和unzip程序,zip是压缩程序,unzip是解压程序.它们的参数 ...

  5. CMD压缩包(zip、rar、rar5)文件解压

    压缩包(zip.rar.rar5)解压 目前WinRAR最新使用的是rar5,rar5加密算法并未开源.网上unrar也只能rar4进行解压: 因此通过安装winrar软件,CMD方式调用软件进行解压 ...

  6. java实现解压(zip和rar文件)实例-解决中文乱码问题

    1.实现说明: 在下面引入的包中可以看出: 1)压缩.解压zip是用到的apache 的zip包,需要在引入jar包(jar-ant.rar): 2)压缩.解压rar需要用到的是junrar,这里需要 ...

  7. 安卓zip解压软件_手机压缩软件ZArchiver下载、使用教程丨免费、中文,支持7z、zip、rar等所有格式...

    点击上方云中栖居关注 ▲ 图片丨Google Play应用商店中的ZArchiver免费版.ZArchiver Donate捐赠版(Pro专业版)图标,两个版本功能基本上一样. ZArchiver自称 ...

  8. java zip 读取_java读取zip (含压缩包内的文件)

    ZIP是一种相当简单的分别压缩每个文件的存档格式.java中使用ZipFile.ZipInputStream快速读取或解压zip压缩包中的目录和文件. 完整示例:package com.weizhix ...

  9. Java批量高效压缩支持加解密支持所有压缩格式(Zip/7z/rar)

    前言:有时候需要对很多文件进行压缩,几个还好如果有100个呢对吧,为什么不借助咱们强大的java呢,所以我就写了一个可以批量压缩,支持所有压缩格式的工具类当然也支持加密和解密,下面就是工具类的代码 废 ...

  10. Java生成压缩文件(zip、rar 格式)

    在开发过程成遇到要把多个文件打包压缩的需求 maven配置 <dependency><groupId>org.apache.ant</groupId><art ...

最新文章

  1. Python将被加入高考科目?你怎么看?
  2. CGGeometry基础
  3. mac 上mysql_connect_Warning: mysql_connect(): No such file or directory 解决方案总结(操作系统: Mac)...
  4. Hbase 协处理器之将数据保存到es (二级索引)
  5. linux精简版远程登录,Linux下如何定制SSH来简化远程访问
  6. 使用wampserver部署的织梦站点无法登录后台
  7. 计算机组成原理 第一章 计算机系统概述
  8. Quartus JIC 焼写
  9. 使用css让文字两端对齐
  10. keepalive高可用
  11. quartz定时任务时间设置
  12. Java我的世界forge安装失败,我的世界forge安装失败install怎么办
  13. 【计网】DNS解析 DDNS解决动态公网IP访问
  14. 全国省市区数据SQL - 省市区
  15. 360 度反馈过程的目标
  16. 数仓用户画像-标签体系详解
  17. 2021年华为c++面试题及答案
  18. 内存模块与计算机兼容,cpu和内存条不兼容怎么办cpu和内存条不兼容的解决方法...
  19. Linux环境下安装TASSEL_5_standalone
  20. influxdb常见操作

热门文章

  1. 苹果官方下载_苹果官方发布的2018年应用榜单里,有安卓也能下载的抠图神器!...
  2. WPS 国际版 Remove ads
  3. reactjs安装并在脚手架中使用 material-ui/core
  4. 使用pktgen-dpdk和l2fwd测试RFC2544
  5. 互联网数据响应时间计算公式
  6. 如何彻底卸载Anaconda?
  7. 基于matlab直方图均衡,matlab 直方图均衡实验报告.pdf
  8. CS61A lab 0:getting started
  9. 蓝桥杯Python题目(二)
  10. excel生成随机姓名