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不存在");
}
}
}
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不存在");
}
}
}
相关文章推荐
- using关键字的使用
- IDW Spatial Analyst(ESRI.ArcGIS.SpatialAnalystTools)ArcEngine中反距离加权插值方法
- 计算机视觉、机器学习相关领域论文和源代码大集合
- Coco2d-x 3.X 点击滚动、移动滚动
- ios 一些简单的 方法
- iOS CoreAnimation专题——原理篇(二) UIView block动画实现原理
- mariadb
- Eclipse开发Java EE应用
- oracle全表扫描
- 数据库Bug集合及解决方法
- php数组函数-array_fill()
- Eclipse迅速执行:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
- CGo中传递多维数组给C函数
- 写酷“大神”的公开信
- 35 个 Java 代码性能优化总结
- xcode因为cocoapods打不开
- 【SSH项目实战】国税协同平台-32.我要投诉功能2
- Java里的字符串、String类
- Android工程的目录结构
- 安装vmware vSphere client出现1402错误:NKNOWN\\Components\\