您的位置:首页 > 其它

gzip压缩指定目录下的所有文件

2015-12-10 11:17 471 查看
package com.example.testgzip;

import java.io.BufferedInputStream;

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.List;

import java.util.zip.GZIPOutputStream;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

import com.example.androidandjs.R;

import android.app.Activity;

import android.content.SharedPreferences;

import android.os.Bundle;

import android.os.Environment;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class TestGzip extends Activity implements OnClickListener {

 @Override

 protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_gzip);

  Button myGzip = (Button) findViewById(R.id.myGzip);

  myGzip.setOnClickListener(this);

 }

 @Override

 public void onClick(View v) {

  switch (v.getId()) {

  case R.id.myGzip:

   // 获取当前文件的路径

   String path = getApplicationContext().getFilesDir().getParent();

   // 将这些文件将当前路径下的文件进行复制压缩

   String targetPath = Environment.getExternalStorageDirectory() + "/haha";

   File target = new File(targetPath);

   if (!target.exists()) {

    target.mkdirs();

   }

   Log.d("aaa", "target:" + target.exists());

   // 创建一个gzip包

   File targetGZip = new File(target.getAbsolutePath() + "/" + new File(path).getName() + ".gz");

   try {

    ZipOutputStream out = new ZipOutputStream(new FileOutputStream(targetGZip));

    BufferedOutputStream bo = new BufferedOutputStream(out);

    File source = new File(path);

    gzipFile(source, out, source.getName(), bo);

   } catch (Exception e) {

    e.printStackTrace();

   }

   break;

  default:

   break;

  }

 }

 public void gzipFile(File source, ZipOutputStream out, String base, BufferedOutputStream bo) {

  if (source.isDirectory()) {

   File[] listFiles = source.listFiles();

   if (listFiles.length == 0) {

    try {

     out.putNextEntry(new ZipEntry(base + "/"));

    } catch (IOException e) {

     e.printStackTrace();

    }

    // 创建zip压缩进入点base

    System.out.println(base + "/");

   }

   for (int i = 0; i < listFiles.length; i++) {

    gzipFile(listFiles[i], out, base + "/" + listFiles[i].getName(), bo);

   }

  } else if (source.isFile()) {

   try {

    out.putNextEntry(new ZipEntry(base)); // 创建zip压缩进入点base

             FileInputStream in = new FileInputStream(source);

             BufferedInputStream bi = new BufferedInputStream(in);

             int b;

             while ((b = bi.read()) != -1) {

                 bo.write(b); // 将字节流写入当前zip目录

             }

             bi.close();

             in.close(); // 输入流关闭

   } catch (Exception e) {

    Log.d("aaa", "error:" + e.getMessage());

   }

  } else {

   throw new IllegalArgumentException("当前source不存在");

  }

 }

 //拷贝指定目录下多级目录里的文件

 public void copyFile(File source, File target) {

  if (source.isDirectory()) {

   File target1 = new File(target.getAbsolutePath() + "/" + source.getName());

   target1.mkdirs();

   File[] listFiles = source.listFiles();

   for (int i = 0; i < listFiles.length; i++) {

    copyFile(listFiles[i], target1);

   }

  } else if (source.isFile()) {

   try {

    FileInputStream in = new FileInputStream(source);

    String targetPath = target.getAbsolutePath();

    targetPath = targetPath + "/" + source.getName();

    Log.d("aaa", "targetPath===>" + targetPath);

    FileOutputStream out = new FileOutputStream(new File(targetPath));

    byte[] bys = new byte[1024 * 5];

    int len = -1;

    while ((len = in.read(bys)) != -1) {

     out.write(bys, 0, len);

    }

    in.close();

    out.close();

   } catch (Exception e) {

    Log.d("aaa", "error:" + e.getMessage());

   }

  } else {

   throw new IllegalArgumentException("当前source不存在");

  }

 }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: