Android压缩文件成.zip及解压缩.zip文件方法
来源:互联网 发布:拍电影知乎 编辑:程序博客网 时间:2024/06/01 20:26
一、解压zip文件:
/** * 解压缩文件(压缩文件中可含子目录) * @param zipFilePath 压缩文件完整路径 * @param targetDir 要解压到的地方的完整路径 * @throws IOException */ public static void unZip(String zipFilePath, String targetDir) throws IOException { long startTime = 0, endTime; int BUFFER = 4096; // 每次读取的缓冲区设为4KB String strEntry; // zip中文件名称 ZipEntry entry; ZipFile zipFile = new ZipFile(zipFilePath, "GBK"); // 如果压缩包中有中文命名的文件,加上“GBK”可避免解压缩后出现乱码的情况 Enumeration<?> enu = zipFile.getEntries(); startTime = System.currentTimeMillis(); System.out.println("开始时间: " + startTime); while (enu.hasMoreElements()) { entry = (ZipEntry) enu.nextElement(); int count; byte[] data = new byte[BUFFER]; strEntry = entry.getName(); if (entry.isDirectory()) { // 如果是子文件夹/目录,则在目标路径新建子文件夹/目录 File file = new File(targetDir + File.separator + strEntry); if (!file.exists()) { file.mkdirs(); } } else { // 如果是文件,则直接解压到目标路径 File entryFile = new File(targetDir + "/" + strEntry); File entryDir = new File(entryFile.getParent()); if (!entryDir.exists()) { entryDir.mkdirs(); } FileOutputStream fos = new FileOutputStream(entryFile); OutputStream bufout = new BufferedOutputStream(fos, BUFFER); InputStream bufis = new BufferedInputStream(zipFile.getInputStream(entry)); while ((count = bufis.read(data, 0, BUFFER)) != -1) { bufout.write(data, 0, count); } bufout.flush(); bufis.close(); bufout.close(); } } endTime = System.currentTimeMillis(); System.out.println("结束时间: " + endTime); System.out.println("用时 :" + (endTime - startTime) + "ms"); zipFile.close(); }
因为java的api在解压zip包中有中文命名的文件时会出现乱码。所以要用到第三方jar包——ant.jar:
二、压缩文件成.zip:
File zipFile = new File(Environment.getExternalStorageDirectory().toString() + "/target.zip"); File targetDir = new File(Environment.getExternalStorageDirectory().toString() + "/xxx"); ZipOutputStream zos = null; try { zos = new ZipOutputStream(new FileOutputStream(zipFile)); } catch (FileNotFoundException e1) { e1.printStackTrace(); } File[] entries = targetDir.listFiles(); for (int i = 0; i < entries.length; i++) { try { zipFile(zos, entries[i], ""); } catch (IOException e) { e.printStackTrace(); } }
以下是压缩文件的核心代码:
private void zipFile(ZipOutputStream zos, File fileOrDirectory, String curPath) throws IOException { FileInputStream fin = null; try { if (fileOrDirectory.isFile()) { // 压缩文件 byte[] buffer = new byte[4096]; int bytes_read; fin = new FileInputStream(fileOrDirectory); ZipEntry entry = new ZipEntry(curPath + fileOrDirectory.getName()); zos.putNextEntry(entry); while ((bytes_read = fin.read(buffer)) != -1) { zos.write(buffer, 0, bytes_read); } zos.closeEntry(); } else if (fileOrDirectory.isDirectory()) { // 压缩文件夹 File[] entries = fileOrDirectory.listFiles(); for (File file : entries) { // 递归压缩,更新curPath zipFile(zos, file, curPath + fileOrDirectory.getName() + "/"); } } } catch (Exception e) { e.printStackTrace(); } finally { if (fin != null) { fin.close(); } } }
同样需要引入Apache 的ant.jar包
0 0
- Android压缩文件成.zip及解压缩.zip文件方法
- java 处理 压缩文件zip,压缩 解压缩zip文件
- Android zip文件压缩解压缩
- Android zip文件压缩解压缩
- Android zip文件压缩解压缩
- Android Zip文件解压缩代码
- Android zip文件压缩解压缩
- Android zip文件压缩解压缩
- Android Zip文件解压缩代码
- Android zip文件压缩解压缩
- Android zip文件压缩解压缩
- Android zip文件压缩解压缩!!!!!!!!!!!
- Android zip文件压缩解压缩
- Android Zip文件解压缩代码
- Android zip文件压缩解压缩
- Android zip文件压缩解压缩
- Android zip文件压缩解压缩
- Android zip文件压缩解压缩
- 图片更换之后显示的还是原来的图片
- 数据库表横表变纵表
- Java集合的总结
- 前端大牛们都学过哪些东西?
- 前端面试基础题目
- Android压缩文件成.zip及解压缩.zip文件方法
- 网页静态化和网页伪静态化之间的区别与选择
- Balanced Binary Tree
- Javascript:为input设置readOnly属性
- adt sdk免翻墙更新
- 二进制求和(LintCode)
- 程序员技术晋升
- Juniper Open contrail 虚拟网络互通
- JavaScript内置对象总结