`
hzy3774
  • 浏览: 992354 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Android将assets中的zip压缩文件解压到SD卡

 
阅读更多

程序首先要获取写外部存储权限:

程序:

package com.hu.andstar;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import android.content.Context;

public class UnzipAssets {

	/**
	 * 解压assets的zip压缩文件到指定目录
	 * @param context上下文对象
	 * @param assetName压缩文件名
	 * @param outputDirectory输出目录
	 * @param isReWrite是否覆盖
	 * @throws IOException
	 */
	public static void unZip(Context context, String assetName,
			String outputDirectory,boolean isReWrite) throws IOException {
		//创建解压目标目录
		File file = new File(outputDirectory);
		//如果目标目录不存在,则创建
		if (!file.exists()) {
			file.mkdirs();
		}
		//打开压缩文件
		InputStream inputStream = context.getAssets().open(assetName);
		ZipInputStream zipInputStream = new ZipInputStream(inputStream);
		//读取一个进入点
		ZipEntry zipEntry = zipInputStream.getNextEntry();
		//使用1Mbuffer
		byte[] buffer = new byte[1024 * 1024];
		//解压时字节计数
		int count = 0;
		//如果进入点为空说明已经遍历完所有压缩包中文件和目录
		while (zipEntry != null) {
			//如果是一个目录
			if (zipEntry.isDirectory()) {
				file = new File(outputDirectory + File.separator + zipEntry.getName());
				//文件需要覆盖或者是文件不存在
				if(isReWrite || !file.exists()){
					file.mkdir();
				}
			} else {
				//如果是文件
				file = new File(outputDirectory + File.separator
						+ zipEntry.getName());
				//文件需要覆盖或者文件不存在,则解压文件
				if(isReWrite || !file.exists()){
					file.createNewFile();
					FileOutputStream fileOutputStream = new FileOutputStream(file);
					while ((count = zipInputStream.read(buffer)) > 0) {
						fileOutputStream.write(buffer, 0, count);
					}
					fileOutputStream.close();
				}
			}
			//定位到下一个文件入口
			zipEntry = zipInputStream.getNextEntry();
		}
		zipInputStream.close();
	}
}

 

 

该方法可以将指定压缩包中所有文件和目录解压到指定的路径:

 

在MainActivity中只需作如下处理:

package com.hu.unzipdemo;

import java.io.IOException;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

	Button btUnzip = null;	
	//设置解压目的路径
	public static String OUTPUT_DIRECTORY = Environment
			.getExternalStorageDirectory().getAbsolutePath() + "/output";

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btUnzip = (Button)findViewById(R.id.buttonUnzip);
        
        btUnzip.setOnClickListener(new OnClickListener() {
			ProgressDialog dialog = new ProgressDialog(MainActivity.this);
			public void onClick(View v) {
				dialog.setTitle("提示");
				dialog.setMessage("正在解压文件,请稍后!");
				dialog.show();//显示对话框
				new Thread(){
					public void run() {
						//在新线程中以同名覆盖方式解压
						try {
							UnZipAssets.unZip(MainActivity.this, "res.zip", OUTPUT_DIRECTORY, true);
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						dialog.cancel();//解压完成后关闭对话框
					}					
				}.start();
			}
		});
    }

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}
}

 压缩包放在项目的assets文件夹下:



 

 解压后发现SD卡上创建了output文件夹,所有文件和目录成功解压.

由于很多文件直接放在assets里打包apk时会被自动压缩,从而在拷贝出来时会发生错误,将这些文件打包成zip后不但可以减小apk的大小,还不会出错。

  • 大小: 12.6 KB
  • 大小: 24.9 KB
分享到:
评论

相关推荐

    Android-文件夹的创建将raw中文件放到SD卡中将assets中文件保存到SD卡中压缩包的解压文件的删除功能.zip

    在Android开发中,有时我们需要对文件进行...以上就是Android中创建文件夹、将`raw`和`assets`目录中的文件保存到SD卡、解压缩文件以及删除文件的基本操作。在实际应用中,还需要考虑异常处理、权限管理等细节问题。

    文件夹的创建将raw中文件放到SD卡中将assets中文件保存到SD卡中压缩包的解压文件的删除功能.zip

    要将文件保存到SD卡,首先需要打开assets中的文件,然后将其写入SD卡上的目标位置: ```java AssetManager assets = getAssets(); InputStream assetIn = assets.open("myfile.txt"); FileOutputStream fileOut = ...

    解压压缩文件

    在Android平台上,处理本地文件和压缩文件是一项常见的任务,尤其是当需要从SD卡或应用程序的assets目录中读取和解压ZIP文件时。本篇将详细介绍如何在Android环境中实现这一功能,包括步骤、方法和涉及的技术点。 ...

    安卓Android源码——GetSDTree(简单SD卡文件浏览器).zip

    【标题】中的“安卓Android源码——GetSDTree(简单SD卡文件浏览器)”指的是一个基于Android操作系统的开源项目,该项目实现了一个简单的SD卡文件浏览器应用。开发者可以通过研究这个源码来了解如何在Android平台上...

    应用源码之GetSDTree(简单SD卡文件浏览器).zip

    【标题】"应用源码之GetSDTree(简单SD卡文件浏览器).zip"是一个关于Android应用程序的源码项目,主要用于帮助开发者学习如何在Android平台上实现一个简单的SD卡文件浏览器。这个项目的核心目标是展示如何访问并展示...

    GetSDTree(简单SD卡文件浏览器).zip

    标题 "GetSDTree(简单SD卡文件浏览器)" 暗示这是一个用于浏览SD卡文件的Android应用程序项目。这个项目的源代码被压缩在".zip"文件中,为开发者提供了一个参考,以便他们能学习如何实现类似的功能或者在此基础上进行...

    Android开机画面修改

    - 下载压缩包`bootanimation.zip`,并将其放置在SD卡中。 - 使用ES文件浏览器、Root Explorer或91助手等工具替换`/system/media/bootanimation.zip`和`/system/customize/resource/bootanimation.zip`两个位置的...

    Android开发问题集锦 情人节特刊

    对于2MB以内的文件,可以使用Zip压缩流处理后放入assets文件夹。若文件大小超过3MB,则建议放入`/res/raw`文件夹下。对于特别大的文件(如10MB以上),建议分开放在SD卡上,这样可以节省ROM空间,并且可以减少APK...

    新版Android开发教程.rar

    MicroSD 卡 ; QWERTY 全键盘; 310 万像素摄像头。 流媒体 支持视频格式: H.264 、流媒体、 3GPP 、 MPEG4 和 Codec 3GP ;支持音频格式: MP3 、 AAC 、 AAC+ 、 W MA 、 MPEG4 、 WAV 、 MIDI 、 REAL 、 AUDIO ...

    安卓做的小记账本app.zip

    【标题】"安卓做的小记账本app.zip"是一个包含有安卓应用开发项目的压缩文件,主要涉及的内容是一款基于Android平台的简易记账本应用程序。这个项目不仅提供了源代码,还可能包括开发过程中的报告和演示用的PPT,...

    root_explorer汉化版

    用户可以方便地在内部存储、外部SD卡以及网络位置之间管理文件。 3. **权限管理**:Root Explorer允许用户更改文件和文件夹的权限,这对于调试和定制系统非常重要。用户可以设置读写执行权限,甚至可以改变文件的...

Global site tag (gtag.js) - Google Analytics