使用JAVA自带的zipInputStream进行解压缩文件包的操作
2013-11-26 15:18
651 查看
package com.ffcs.icity.common.util; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.RandomStringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 提供的针对文件的加压解压的操作工具类 * @author linwei * */ public class ZipUtil { private final static Logger log = LoggerFactory.getLogger(ZipUtil.class); /** * 执行压缩文件的解压,并自动生成文件的操作 * @param in * @param outputDirectory * @return * */ public static Map<String,Object> unZip(InputStream in,String outputDirectory){ if(in == null) return null; ZipEntry zipEntry = null; FileOutputStream out = null; String uniqueName,iconUrl = null; Map<String,Object> map = new HashMap<String,Object>(); ZipInputStream zipIn = new ZipInputStream(in); try{ while ((zipEntry = zipIn.getNextEntry()) != null) { //如果是文件夹路径方式,本方法内暂时不提供操作 if (zipEntry.isDirectory()) { // String name = zipEntry.getName(); // name = name.substring(0, name.length() - 1); // File file = new File(outputDirectory + File.separator + name); // file.mkdir(); } else { //如果是文件,则直接在对应路径下生成 uniqueName = getSavedFileName(zipEntry.getName()); File path = new File(outputDirectory + File.separator); if(!path.exists()) path.mkdirs(); iconUrl = outputDirectory + File.separator + uniqueName; File file = new File(iconUrl); file.createNewFile(); out = new FileOutputStream(file); int b = 0; while ((b = zipIn.read()) != -1){ out.write(b); } out.close(); map.put(zipEntry.getName(),iconUrl); } } return map; } catch(Exception ex){ log.error("in unZip(InputStream in,String outputDirectory) has an error,e is " + ex); return null; } finally{ IOUtils.closeQuietly(zipIn); IOUtils.closeQuietly(in); IOUtils.closeQuietly(out); } } /** * 解压压缩文件流,并根据解压层次来判断,是否只解析第一层,还是解析所有数据 * map<name,inputstream> * @param in * @param parseLevel * @return */ public static Map<String,Object> unZip(InputStream in,int parseLevel){ if(in == null) return null; ZipEntry zipEntry = null; FileOutputStream out = null; Map<String,Object> map = new HashMap<String,Object>(); ZipInputStream zipIn = new ZipInputStream(in); try{ while ((zipEntry = zipIn.getNextEntry()) != null) { //如果是文件夹路径方式,本方法内暂时不提供操作 if (zipEntry.isDirectory()) { // String name = zipEntry.getName(); // name = name.substring(0, name.length() - 1); // File file = new File(outputDirectory + File.separator + name); // file.mkdir(); } else { //如果是文件,则直接存放在Map中 String name = zipEntry.getName(); //把压缩文件内的流转化为字节数组,够外部逻辑使用(之后关闭流) byte[] bt = IOUtils.toByteArray(zipIn); map.put(name,bt); } } return map; } catch(Exception ex){ log.error("in unZip(InputStream in,int parseLevel) has an error,e is " + ex); return null; } finally{ IOUtils.closeQuietly(zipIn); IOUtils.closeQuietly(in); IOUtils.closeQuietly(out); } } /** * 根据传递的文件名(带后缀)生成唯一新文件名(带后缀) * @param origFileName * @return */ private static String getSavedFileName(String origFileName) { return DateHelper.getCurrentTimeStamp("yyyyMMddHHmmss") + "-" + RandomStringUtils.randomNumeric(5) + "." + FilenameUtils.getExtension(origFileName); } public static void main(String[] args) throws IOException { // FileInputStream in = new FileInputStream(new File("d:\\Temp\\Temp.zip")); // Map map = unZip(in,0); // System.out.println("map is " + map.size()); // byte[] bt = (byte[])map.get("ziptest.zip"); byte[] bt = null; InputStream in1 = new ByteArrayInputStream(bt); // unZip(in1,"d://test"); System.err.println("over."); } }
相关文章推荐
- java中使用JXL对Excel文件进行数据的写入、导出操作
- java 如何使用缓冲区对文件进行读写操作
- java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息
- 对称加密算法AES------使用AES算法对文件进行加密/解密的操作(JAVA)
- 使用Java对文件进行解压缩
- java学习笔记:使用zip api进行文件解压缩以及不解压直接读取指定文件内容
- 黑马程序员_java初操作使用FileReader及FileWriter进行文件复制
- 使用AES算法对文件进行加密/解密的操作(JAVA)
- 黑马程序员_java用java进行复制文件(考虑使用多线程),能系统自带快吗??
- java操作MongoDB:使用GridFS对文件进行操作
- 使用PHP进行压缩/解压缩文件操作技巧汇总
- 【Java】IO操作之使用zip包压缩和解压缩文件
- CompressFile工具类使用,zip和rar文件解压缩与打包操作Java源代码
- java使用CsvReader和CsvWriter对csv文件内容进行读取和写入操作
- Hadoop使用Java进行文件修改删除操作
- java中使用JXL对Excel文件进行数据的写入、导出操作
- 使用JDK自带的方法进行文件解压
- java创建TXT文件并进行读、写、修改操作
- 【MySQL 05】使用Java对MySQL进行操作(创建数据库)
- 在QTP中,经常会遇到需要写入外部文件的地方,比如写Log什么的,这时,可以使用下面代码进行写Txt操作。