`
pacer123
  • 浏览: 90772 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

有关文件压缩解压的例子!

 
阅读更多

在某些项目中,需要对文件进行打包,解包。通过网上学习,写了一个压缩、解压的工具类,方便后续使用,可供参考。代码如下:

 

package com.icss.dem.sdk;

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.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;

import com.icss.dem.conf.SystemConfig;
import com.icss.pangu.logging.Log;
import com.icss.pangu.logging.LogFactory;
import com.icss.pangu.util.string.StringUtil;

/**
 * <p>Title: 文件打包解包工具类</p>
 */
public class FileZipImpl {
 private static Log  log = LogFactory.getLog(FileZipImpl.class);
 /**
  * 数据打包压缩
  * @param fileList 文件列表
  * @param batchNumber 批次号
  * @throws Exception
  * @return 返回压缩的文件
  */
 public static File zipFile(List fileList, String batchNumber) throws Exception
 {
  byte b[] = new byte[512];
  String fileName = batchNumber+ SystemConfig.ZIP_FILE_TYPE;
  log.info("===fileName===" + fileName);
  File zipFile = new File("f:/" + fileName);
  
  FileOutputStream fileOutputStream;
  ZipOutputStream out = null;
  CheckedOutputStream cs = null;
  try {
   fileOutputStream = new FileOutputStream(zipFile);
   // 定义文件输出流检查
   cs = new CheckedOutputStream(fileOutputStream,new CRC32());
   // 定义输出的zip流对象
   out = new ZipOutputStream(new BufferedOutputStream(cs));
   for (int i = 0; i < fileList.size(); i++) {
    
    /*
     * 此部分代码为传递文件路径
     */
//       InputStream in = new FileInputStream((String) fileList.get(i));
//    log.info("filePath=="+((String)fileList.get(i)));
//    String tempFileName = ((String)fileList.get(i)).replace(File.separatorChar, '/');
    
    //下面部分为传递文件对象
    InputStream in = new FileInputStream((File) fileList.get(i));
    log.info("filePath=="+((File)fileList.get(i)).getAbsolutePath());
    String tempFileName = ((File)fileList.get(i)).getAbsolutePath().replace(File.separatorChar, '/');
    
    tempFileName = tempFileName.substring(tempFileName.indexOf("/") + 1);
    ZipEntry e = new ZipEntry(tempFileName);
    out.putNextEntry(e);
    int len = 0;
    while ((len = in.read(b)) != -1) {
     out.write(b, 0, len);
    }
    out.closeEntry();
   }
   
   out.close();
   log.info("文件压缩成功");
  } catch (FileNotFoundException e1) {
   log.error("文件未找到",e1);
   throw new Exception("文件未找到");
  } catch (IOException e2) {
   log.error("文件IO出现异常",e2);
   throw new Exception("文件IO出现异常");
  } finally{
   if(null != out)
    out.close();
   if(null != cs)
    cs.close();
  }  
  return zipFile;
 }
 
 /**
  * 解压文件
  * @param zipFile 传入的.dem文件
  * @return 返回文件列表
  */
 public static List unZipFile(ZipFile zipFile)throws Exception
 {
  List list = new ArrayList();
  //临时解压文件目录
  String unZipFilePath = SystemConfig.TEMP_UNZIP_PATH;
  
  File tempPath = new File(unZipFilePath);
  if(tempPath.exists() != true)
   tempPath.mkdir();
  
  String zipFileName = zipFile.getName();
  log.info("===zipfileName====" + zipFileName);
  if(zipFileName.indexOf(SystemConfig.ZIP_FILE_TYPE) == -1)
  {
   log.error("所传入文件格式不正确");
   throw new Exception("所传入文件格式不正确");
  }
  try{
   Enumeration e = zipFile.entries();
   ZipEntry zipEntry = null;
   createDirectory(unZipFilePath, "");
   
   while (e.hasMoreElements()) {
    zipEntry = (ZipEntry) e.nextElement();
    log.info("解压文件名称: " + zipEntry.getName());
    if (zipEntry.isDirectory()) {
     String name = zipEntry.getName();
     name = name.substring(0, name.length() - 1);
     File f = new File(unZipFilePath + File.separator + name);
     f.mkdir();
    } else {
     String fileName = zipEntry.getName();
     if (fileName.indexOf("/") != -1) {
      createDirectory(unZipFilePath, fileName.substring(0,
        fileName.lastIndexOf("/")));
     }
     File unZipFile = new File(unZipFilePath + zipEntry.getName());

     unZipFile.createNewFile();
     InputStream in = zipFile.getInputStream(zipEntry);
     FileOutputStream out = new FileOutputStream(unZipFile);

     byte[] by = new byte[1024];
     int c;
     while ((c = in.read(by)) != -1) {
      out.write(by, 0, c);
     }
     out.close();
     in.close();
     list.add(unZipFile);
    }
   }
  } catch (FileNotFoundException e1) {
   log.error("解压文件未找到",e1);
   throw new Exception("解压文件未找到");
  } catch (IOException e2) {
   log.error("文件IO出现异常",e2);
   throw new Exception("文件IO出现异常");
  } finally{
   
  }
  
  return list;
 }
 
 /**
  *
  */
 private static void createDirectory(String directory, String subDirectory) {
  String dir[];
  File fl = new File(directory);
  try {
   if (subDirectory == "" && fl.exists() != true)
    fl.mkdir();
   else if (subDirectory != "") {
    dir = StringUtil.convertToArray(subDirectory, "/");
    for (int i = 0; i < dir.length; i++) {
     File subFile = new File(directory + File.separator + dir[i]);
     if (subFile.exists() == false)
      subFile.mkdir();
     directory += File.separator + dir[i];
    }
   }
  } catch (Exception ex) {
  }
 }
 
 public static void main(String[] args) throws Exception {
  List list = new ArrayList();
  File file1 = new File("F:/pic/1.jpg");
  File file2 = new File("F:/pic/2.jpg");
  
  //String file1="F:/pic/1.jpg";
  //String file2="F:/pic/2.jpg";
  list.add(file1);
  list.add(file2);
  
  try {
   //压缩文件
   //FileZipImpl.zipFile(list, "123");
   //解压文件
   FileZipImpl.unZipFile(new ZipFile("F:/123.dem"));
  } catch (IOException e) {
   // e.printStackTrace();
  }
  
 }
}


 

分享到:
评论

相关推荐

    java zip 压缩解压例子

    总结,Java的`java.util.zip`包提供了解决ZIP文件压缩和解压需求的工具。通过`ZipOutputStream`和`ZipInputStream`,我们可以方便地处理ZIP文件,无论是创建新的ZIP文件,还是读取和提取已有的ZIP文件。同时,这些...

    文件压缩解压.rar

    文件压缩与解压是计算机操作中的常见任务,它涉及到数据存储和传输的效率问题。本文将深入探讨这一主题,从基本概念、常见的压缩格式、压缩原理到如何进行压缩与解压,以及相关的实用工具。 首先,文件压缩是为了...

    C#压缩解压例子

    在C#编程中,压缩和解压缩文件是常见的任务,特别是在数据存储、文件传输和备份等领域。本示例将深入探讨如何使用C#实现这一功能,主要涉及`System.IO.Compression`命名空间中的ZipArchive类。 首先,让我们了解C#...

    c#压缩解压(可以压缩解压文件夹附有源妈)

    以下是一个简单的使用ZipArchive类进行文件压缩的例子: ```csharp using System.IO; using System.IO.Compression; public static void CompressFolder(string sourceFolderPath, string destinationZipFilePath)...

    文件压缩与解压

    文件压缩与解压是计算机操作中的常见任务,它允许我们将大量数据进行减小体积的处理,以便于存储、传输或分享。在IT领域,我们通常使用各种压缩算法和工具来完成这一过程。本文将深入探讨如何使用Java中的`ZipFile`...

    zipwrap,用于文件压缩解压

    总的来说,zipwrap是一个基于zlib库的文件压缩解压工具,它的特点是开源、可编译、可运行,并具有良好的可扩展性和跨平台性。无论你是普通用户还是开发者,zipwrap都能为你提供高效、灵活的文件管理方案。了解并掌握...

    C# 压缩解压文件

    使用它进行文件压缩和解压缩的方法与.NET框架的API相似,但提供了更多自定义选项。 #### Ionic.Zlib Ionic.Zlib是另一个流行的库,它提供了.NET框架中没有的DEFLATE算法的实现,并且兼容GZipStream和DeflateStream...

    Oracle P/L SQL实现文件压缩、解压功能(最新版)

    这个"Oracle P/L SQL实现文件压缩、解压功能"的资源,包含了一个名为`UTL_ZIP.plb`的PL/SQL包体以及一个`ZIP包头说明和调用例子.txt`的文本文件,这将帮助我们理解如何在Oracle环境中处理ZIP文件。 `UTL_ZIP`是...

    C# 压缩解压文件 demo

    本示例中的"C# 压缩解压文件 demo"利用了特定的dll库,可能是SharpZipLib、System.IO.Compression(.NET Framework自带)或者第三方库如DotNetZip。这些库提供了易于使用的API,使得在Visual Studio 2013中处理压缩...

    Zip压缩和解压文件

    在IT领域,文件压缩是一种常见的数据管理技术,用于减少文件大小,便于存储、传输和分享。Zip格式是最常用的文件压缩格式之一,它允许用户将多个文件和文件夹打包成一个单一的Zip档案,大大节省了磁盘空间。本文将...

    C# 文件压缩-指定文件压缩

    在C#编程环境中,文件压缩是一项常见的任务,特别是在数据存储、传输或备份时。本教程将深入探讨如何使用C#来实现对特定文件的压缩。我们将主要关注`System.IO.Compression`命名空间中的ZipArchive类,它是.NET ...

    java 操作Zip文件(压缩、解压、加密).zip

    Java操作Zip文件主要涉及到对文件和目录的压缩与解压缩,以及在必要时对压缩文件进行加密处理。这里我们重点讨论使用两个库:`zip4j`和`Apache Ant`来实现这些功能。 1. **zip4j库**:`zip4j-1.3.2.jar`是一个用...

    PHP在线快速压缩解压ZIP文件

    以上就是关于“PHP在线快速压缩解压ZIP文件”的核心内容。通过结合PCLZip库和`index.php`,我们可以构建一个用户友好的Web应用,让用户方便地在线处理ZIP文件。记住,确保在实际部署时考虑安全性,例如验证文件类型...

    基于Java实现的带密码压缩与解压文件类库源码及例子程序

    在IT行业中,文件压缩与解压是常见的操作,特别是在数据传输、存储优化和备份场景下。Java作为一种广泛使用的编程语言,提供了丰富的库来处理这样的任务。本资源"基于Java实现的带密码压缩与解压文件类库源码及例子...

    java解压zip压缩文件

    在Java编程环境中,解压ZIP压缩文件是一项常见的任务,它涉及到文件I/O操作以及对ZIP文件格式的理解。本文将深入探讨如何使用Java实现这一功能,同时也会提及`UnZip.java`和`UnZip2.java`这两个文件可能包含的实现...

    C++ zip文件解压VS例子

    通过这个例子,初学者可以了解如何在C++环境中使用zlib和minizip库来处理ZIP文件,为后续的文件压缩和解压缩工作打下基础。实践中,根据具体需求,还可以扩展到其他文件格式,或者实现更复杂的逻辑,如加密、校验等...

    iphone/ipad解压压缩的例子

    本例子聚焦于如何在iPhone和iPad上进行文件的解压缩操作,这对于优化应用程序性能和节省存储空间至关重要。 在iOS中,我们主要依赖于Foundation框架中的`NSFileManager`, `NSData`, 和 ` zlib` 库来处理压缩文件。`...

    java解压linux上的压缩文件gz格式文件

    首先,我们来看一个基本的例子,该例子展示了如何使用 `GZIPInputStream` 类来读取并解压 `.gz` 文件。下面的代码片段展示了这一过程: ```java try { // 打开压缩文件 String inFilename = "infile.gzip"; ...

    vb.net 利用.net自带的GZipStream压缩或者解压文件的代码,不需要任何第三方控件

    网上很少有用VB写的压缩文件的代码,但是,在网络...另外加上了多层文件夹压缩解压。但是,因为时间有限,只是将文件全部读取到缓存处理,所以,针对大文件没有做特别的处理。例子里面有提示,根据需要自己改动一下吧。

    Delphi 流数据的压缩与解压

    本节将详细介绍如何在Delphi 2007中实现流数据的压缩和解压,以及相关的核心概念和技术。 首先,我们需要了解什么是流数据。在计算机科学中,流数据(Stream Data)是指以顺序方式处理或传输的数据序列,它可以是...

Global site tag (gtag.js) - Google Analytics