Android 解压缩功能

主要用到zip:

1 import java.util.Enumeration;
2 import java.util.zip.CRC32;
3 import java.util.zip.CheckedOutputStream;
4 import java.util.zip.ZipEntry;
5 import java.util.zip.ZipFile;
6 import java.util.zip.ZipOutputStream;

解压文件:

 1 /**
 2      * 解压缩功能. 将zipPath文件 解压到folderPath目录下.
 3      *
 4      * @param zipFile zip文件
 5      * @param destDir 解压到的文件路径
 6      * @throws java.io.IOException
 7      */
 8     public static void upZipFile(File zipFile, String destDir) {
 9         File pathFile = new File(destDir + "/");
10         if (!pathFile.exists()) {
11             pathFile.mkdirs();
12         }
13
14         try {
15             ZipFile zip = new ZipFile(zipFile);
16
17             for (Enumeration<?> entries = zip.entries(); entries.hasMoreElements(); ) {
18                 ZipEntry entry = (ZipEntry) entries.nextElement();
19                 String zipEntryName = entry.getName();
20
21                 InputStream in = zip.getInputStream(entry);
22                 String outPath = (destDir + "/" + zipEntryName).replaceAll("\\*", "/");
23
24                 // 判断路径是否存在,不存在则创建文件路径
25                 File file = new File(outPath.substring(0, outPath.lastIndexOf(‘/‘)));
26                 if (!file.exists()) {
27                     file.mkdirs();
28                 }
29                 // 判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压
30                 if (new File(outPath).isDirectory()) {
31                     continue;
32                 }
33                 // 输出文件路径信息
34                 System.out.println(outPath);
35
36                 OutputStream out = new FileOutputStream(outPath);
37                 byte[] buf1 = new byte[1024];
38                 int len;
39                 while ((len = in.read(buf1)) > 0) {
40                     out.write(buf1, 0, len);
41                 }
42                 in.close();
43                 out.close();
44             }
45         } catch (IOException e) {
46             e.printStackTrace();
47         }
48     }

压缩文件:

(1)首先要声明个压缩类:

 1 public static class ZipCompressor {
 2         static final int BUFFER = 1024 * 128;
 3
 4         private File zipFile;
 5
 6         public ZipCompressor(String pathName) {
 7             zipFile = new File(pathName);
 8         }
 9
10         public void compress(String srcPathName) {
11             File file = new File(srcPathName);
12             if (!file.exists())
13                 throw new RuntimeException(srcPathName + "不存在!");
14             try {
15                 FileOutputStream fileOutputStream = new FileOutputStream(zipFile);
16                 CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream, new CRC32());
17                 ZipOutputStream out = new ZipOutputStream(cos);
18                 String basedir = "";
19                 compress(file, out, basedir);
20                 out.close();
21             } catch (Exception e) {
22                 throw new RuntimeException(e);
23             }
24         }
25
26         private void compress(File file, ZipOutputStream out, String basedir) {
27             /* 判断是目录还是文件 */
28             if (file.isDirectory()) {
29                 System.out.println("压缩:" + basedir + file.getName());
30                 this.compressDirectory(file, out, basedir);
31             } else {
32                 System.out.println("压缩:" + basedir + file.getName());
33                 this.compressFile(file, out, basedir);
34             }
35         }
36
37         /** 压缩一个目录 */
38         private void compressDirectory(File dir, ZipOutputStream out, String basedir) {
39             if (!dir.exists())
40                 return;
41
42             File[] files = dir.listFiles();
43             for (int i = 0; i < files.length; i++) {
44                 /* 递归 */
45                 compress(files[i], out, basedir + dir.getName() + "/");
46             }
47         }
48
49         /** 压缩一个文件 */
50         private void compressFile(File file, ZipOutputStream out, String basedir) {
51             if (!file.exists()) {
52                 return;
53             }
54             try {
55                 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
56                 ZipEntry entry = new ZipEntry(basedir + file.getName());
57                 out.putNextEntry(entry);
58                 int count;
59                 byte data[] = new byte[BUFFER];
60                 while ((count = bis.read(data, 0, BUFFER)) != -1) {
61                     out.write(data, 0, count);
62                 }
63                 bis.close();
64             } catch (Exception e) {
65                 throw new RuntimeException(e);
66             }
67         }
68     }

压缩类使用:

1 public static void compress(String srcPathName, String zipPathName) {
2     ZipCompressor zipCompressor = new ZipCompressor(zipPathName);
3     zipCompresspr.compress(srcPathName);
4 }
时间: 2024-08-05 13:25:54

Android 解压缩功能的相关文章

Android倒计时功能的实现(CountDownTimer)

以前编程的时候,遇到倒计时的功能时,经常自己去写,但其实Android已经帮封装好了一个倒计时类CountDownTimer,其实是将后台线程的创建和Handler队列封装成为了一个方便的类调用. 说明: CountDownTimer timer = new CountDownTimer(30000, 1000)中,第一个参数表示总时间,第二个参数表示间隔时间. 意思就是每隔一秒会回调一次方法onTick,然后30秒之后会回调onFinish方法. package com.androidcoun

C#调用 ICSharpCode.SharpZipLib.Zip 实现解压缩功能公用类

最近想用个解压缩功能 从网上找了找 加自己修改,个人感觉还是比较好用的,直接上代码如下 using System; using System.Linq; using System.IO; using ICSharpCode.SharpZipLib.Zip; using ICSharpCode.SharpZipLib.Checksums; using System.Diagnostics; using Microsoft.Win32; namespace ZipCommon { public cl

QtAndroid详解(3):startActivity实战Android拍照功能

在"QtAndroid详解(1):QAndroidJniObject"中,我们介绍了 QAndroidJniObject 这个 Qt JNI 的核心类,在""中我们介绍了 startActivity 以及与它配套的一些 Android 背景知识,这次我们来看一个实例,演示如何使用 startActivity 来调用 Android 系统功能,同时也演示 QAndroidJniObject 的常见用法. 实例介绍 先看下实例效果,然后再论. 我们只是演示 API 用法

Delphi xe7 up1 调用android振动功能

Delphi xe7 up1 调用android振动功能 振动用到以下4个单元: Androidapi.JNI.App,Androidapi.JNIBridge,Androidapi.JNI.Os,Androidapi.Helpers 使用方法: var LVibrator: JVibrator; begin LVibrator := TJVibrator.Wrap ((SharedActivity.getSystemService(TJActivity.JavaClass.VIBRATOR_S

Android -- 分享功能和打开指定程序

打开指定程序                                                                                Intent intent = new Intent(); ComponentName cmp = new ComponentName("com.sina.weibo","com.sina.weibo.EditActivity"); intent.setAction(Intent.ACTION_M

Android 照相功能

使用内置的Camera 应用程序捕获图像            探索Android 所提供的内置功能,内置的图像捕获与存储功能为Android 上所有媒体功能提供了一个很好的切入点,为我们在以后的章节中处理音频和视频奠定了基础.            现在介绍如何利用内置的Camera(摄像头)应用程序.    package com.example; import java.io.File; import android.app.Activity; import android.content

Android语音识别功能使用总结

Android引入了对语音识别的支持.语音识别主要位于android.speech包中,主要的类包括SpeechRecognizer.RecognitionService.RecognizerIntent.RecognizerResultsIntent.RecognitionListener等类和接口. SpeechRecognizer提供了接入语音识别服务的接口,下面是SpeechRecognizer的常用方法: <span style="font-size:18px;">

安卓应用内计费方案 --Android 计费功能最全面的SDK

安卓应用内计费方案 通常应用计费只有按时长.按流量.按次.包月这几种.这些传统的计费规则已不能满足日益增长的应用内容的需要. 比如阅读.导航.音乐.工具类应用等,由于其本身特性需要多种计费规则.采用下载免费.应用内计费的大原则前提下,应用内计费的多样性将能大大提高付费转化率.因为一款应用从上线到成熟是需要一个过程的,用户从了解到熟悉到原意付费使用也需要一个长期过程.在这个过程中需要多种计费规则来引导用户使用应用.如尝试性的按次收费,包次数收费,免费N次后收费,多种产品打包收费,节假日促销买二送一

Android常用功能代码块

1.设置activity无标题,全屏 // 设置为无标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置为全屏模式 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 2.获得屏幕高度和宽度 //获取屏幕的高度和宽度用到WindowManager这个类 WindowMan