Android中文件的压缩和解压缩实例代码

使用场景

当我们在应用的Assets目录中需要加入文件时,可以直接将源文件放入,但这样会造成打包后的apk整体过大,此时就需要将放入的文件进行压缩.又如当我们需要从服务器中下载文件时,如果下载源文件耗时又消耗流量,较大文件需要压缩,可以使得传输效率大大提高.下面我们就学习下基本的文件压缩和解压缩.Java中提供了压缩和解压缩的输入输出流

public static void zip(String src,String dest) throwsIOException {
  //定义压缩输出流
  ZipOutputStreamout = null;
  try {
    //传入源文件
    File outFile= newFile(dest);
    File fileOrDirectory= newFile(src);
    //传入压缩输出流
    out = newZipOutputStream(newFileOutputStream(outFile));
    //判断是否是一个文件或目录
    //如果是文件则压缩
    if (fileOrDirectory.isFile()){
      zipFileOrDirectory(out,fileOrDirectory, "");
    } else {
      //否则列出目录中的所有文件递归进行压缩
      File[]entries = fileOrDirectory.listFiles();
      for (int i= 0; i < entries.length;i++) {
        zipFileOrDirectory(out,entries,"");
      }
    }
  }catch(IOException ex) {
    ex.printStackTrace();
  }finally{
    if (out!= null){
      try {
        out.close();
      }catch(IOException ex) {
        ex.printStackTrace();
      }
    }
  }
}
private static void zipFileOrDirectory(ZipOutputStream out, File fileOrDirectory, String curPath)throwsIOException {
  FileInputStreamin = null;
  try {
    //判断目录是否为null
    if (!fileOrDirectory.isDirectory()){
      byte[] buffer= new byte[4096];
      int bytes_read;
      in= newFileInputStream(fileOrDirectory);
      //归档压缩目录
      ZipEntryentry = newZipEntry(curPath + fileOrDirectory.getName());
      //将压缩目录写到输出流中
      out.putNextEntry(entry);
      while ((bytes_read= in.read(buffer))!= -1) {
        out.write(buffer,0, bytes_read);
      }
      out.closeEntry();
    } else {
      //列出目录中的所有文件
      File[]entries = fileOrDirectory.listFiles();
      for (int i= 0; i < entries.length;i++) {
        //递归压缩
        zipFileOrDirectory(out,entries,curPath + fileOrDirectory.getName()+ "/");
      }
    }
  }catch(IOException ex) {
    ex.printStackTrace();
  }finally{
    if (in!= null){
      try {
        in.close();
      }catch(IOException ex) {
        ex.printStackTrace();
      }
    }
  }
}

上述代码存在问题,若文件压缩后仍然很大怎么办,换句话说文件压缩率低也是问题,java中也专门对Linux提供了高压缩率的输入输出流,其使用方法和上述代码相似.高压缩率输入输出流:(GZIPInputStream和GZIPOutputStream)

文件压缩

public static void zip(File srcFile, File desFile)throwsIOException {
  GZIPOutputStreamzos = null;
  FileInputStreamfis = null;
  try {
    //创建压缩输出流,将目标文件传入
    zos = newGZIPOutputStream(newFileOutputStream(desFile));
    //创建文件输入流,将源文件传入
    fis = newFileInputStream(srcFile);
    byte[] buffer= new byte[1024];
    int len= -1;
    //利用IO流写入写出的形式将源文件写入到目标文件中进行压缩
    while ((len= (fis.read(buffer)))!= -1) {
      zos.write(buffer,0, len);
    }
  }finally{
    close(zos);
    close(fis);
  }
}

文件解压缩

public static void unZip(File srcFile,File desFile) throws IOException {
  GZIPInputStream zis= null;
  FileOutputStreamfos = null;
  try {
    //创建压缩输入流,传入源文件
    zis = new GZIPInputStream(newFileInputStream(srcFile));
    //创建文件输出流,传入目标文件
    fos = newFileOutputStream(desFile);
    byte[] buffer= new byte[1024];
    int len= -1;
    //利用IO流写入写出的形式将压缩源文件解压到目标文件中
    while ((len= (zis.read(buffer)))!= -1) {
      fos.write(buffer,0, len);
    }
  }finally{
    close(zis);
    close(fos);
  }
}

以上所述是小编给大家介绍的Android中文件的压缩和解压缩实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Android如何实现压缩和解压缩文件

    废话不多说了,直接给大家贴java代码了,具体代码如下所示: Java代码 package com.maidong.utils; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOu

  • Android实现zip文件压缩及解压缩的方法

    本文实例讲述了Android实现zip文件压缩及解压缩的方法.分享给大家供大家参考.具体如下: DirTraversal.java如下: package com.once; import java.io.File; import java.util.ArrayList; import java.util.LinkedList; /** * 文件夹遍历 * @author once * */ public class DirTraversal { //no recursion public sta

  • android打开rar压缩文件

    复制代码 代码如下: private void open(String fileString) { Intent intent = new Intent(); intent.setClassName("com.rarlab.rar", "com.rarlab.rar.MainActivity"); File file = new File(fileString); Uri data = Uri.fromFile(file); intent.setData(data)

  • Android编程实现将压缩数据库文件拷贝到安装目录的方法

    本文实例讲述了Android编程实现将压缩数据库文件拷贝到安装目录的方法.分享给大家供大家参考,具体如下: public void copyZip2DataDirectory(Context context) throws IOException { FileOutputStream outputStream = null; AssetManager assetManager = context.getAssets(); InputStream inputStream = assetManage

  • Android实现下载zip压缩文件并解压的方法(附源码)

    前言 其实在网上有很多介绍下载文件或者解压zip文件的文章,但是两者结合的不多,所以这篇文章在此记录一下下载zip文件并直接解压的方法,直接上代码,文末有源码下载. 下载: import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream

  • Android使用广播(BroadCast)实现强制下线的方法

    本文实例讲述了Android使用广播(BroadCast)实现强制下线的方法.分享给大家供大家参考,具体如下: 使用广播简单模拟强制下线功能. 1.新建活动管理类 新建Activity活动管理类,方便管理所有活动. package com.example.broadcastpractice; import java.util.ArrayList; import java.util.List; import android.app.Activity; /** * 所有活动管理器 * @author

  • Android 实现文件夹排序功能的实例代码

    按文件名排序 /** * 按文件名排序 * @param filePath */ public static ArrayList<String> orderByName(String filePath) { ArrayList<String> FileNameList = new ArrayList<String>(); File file = new File(filePath); File[] files = file.listFiles(); List fileL

  • Android 中隐藏虚拟按键的方法实例代码

    下面通过一段代码给大家讲解android 隐藏虚拟按键的方法,废话不多说了,大家多多看看代码和注释吧,具体代码如下所示: /** * 隐藏虚拟按键,并且全屏 */ protected void hideBottomUIMenu() { //隐藏虚拟按键,并且全屏 if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api View v = this.getWindow().getDec

  • Android中双击返回键退出应用实例代码

    Android中双击返回键退出程序 1.在MyAppliction中(继承Application) //运用list来保存们每一个activity是关键 private List<Activity> mList = new LinkedList<Activity>(); //为了实现每次使用该类时不创建新的对象而创建的静态对象 private static MyApplication instance; //构造方法 public MyApplication() { } //实例化

  • Android中截取当前屏幕图片的实例代码

    复制代码 代码如下: /**     * 获取和保存当前屏幕的截图     */    private void GetandSaveCurrentImage()      {          //1.构建Bitmap          WindowManager windowManager = getWindowManager();          Display display = windowManager.getDefaultDisplay();          int w = d

  • android中Bitmap的放大和缩小实例代码

    复制代码 代码如下: /**Bitmap放大的方法*/ private static Bitmap big(Bitmap bitmap) { Matrix matrix = new Matrix(); matrix.postScale(1.5f,1.5f); //长和宽放大缩小的比例 Bitmap resizeBmp = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true); return

  • Android中文件的压缩和解压缩实例代码

    使用场景 当我们在应用的Assets目录中需要加入文件时,可以直接将源文件放入,但这样会造成打包后的apk整体过大,此时就需要将放入的文件进行压缩.又如当我们需要从服务器中下载文件时,如果下载源文件耗时又消耗流量,较大文件需要压缩,可以使得传输效率大大提高.下面我们就学习下基本的文件压缩和解压缩.Java中提供了压缩和解压缩的输入输出流 public static void zip(String src,String dest) throwsIOException { //定义压缩输出流 Zip

  • java ant包中的org.apache.tools.zip实现压缩和解压缩实例详解

    java ant包中的org.apache.tools.zip实现压缩和解压缩实例详解 其实apache中的ant包(请自行GOOGLE之ant.jar)中有一个更好的类,已经支持中文了,我们就不重复制造轮子了,拿来用吧, 这里最主要的功能是实现了 可以指定多个文件 到同一个压缩包的功能 用org.apache.tools.zip压缩/解压缩zip文件的例子,用来解决中文乱码问题. 实例代码: import Java.io.BufferedInputStream; import java.io.

  • java 压缩和解压缩Zip、Jar、Gzip文件实例代码

    我们经常会使用WinZIP等压缩软件将文件进行压缩以方便传输.在java里面也提供了将文件进行压缩以减少传输时的数据量的类,可以很方便的将文件压缩成ZIP.JAR.GZIP等形式,GZIP主要是在Linux系统下的压缩文件. 下面主要讲的就是ZIP形式的压缩文件,而JAR.GZIP形式的压缩文件也是类似的用法. ZIP是一种很常见的压缩形式,在java中要实现ZIP的压缩主要用到的是java.util.zip这个包里面的类.主要有ZipFile. ZipOutputStream.ZipInput

  • Python实现压缩和解压缩ZIP文件的方法分析

    本文实例讲述了Python实现压缩和解压缩ZIP文件的方法.分享给大家供大家参考,具体如下: 有时我们需要在 Python 中使用 zip 文件,而在1.6版中,Python 就已经提供了 zipfile 模块可以进行这样的操作.不过 Python 中的 zipfile 模块不能处理多卷的情况,不过这种情况并不多见,因此在通常情况下已经足够使用了.下面我只是对一些基本的 zipfile 操作进行了记录,足以应付大部分的情况了. zipfile 模块可以让你打开或写入一个 zip 文件.比如: i

随机推荐