现在的位置: 首页 > 综合 > 正文

解压assets资源文件夹的压缩文件,并下载到SD卡中。

2018年02月10日 ⁄ 综合 ⁄ 共 1083字 ⁄ 字号 评论关闭

涉及到知识点:读去assets目录中文件、文件解压、文件复制等

获取压缩文件长度说明:

1、File.length():路径名表示的文件的长度。如果此路径名表示一个目录,则返回值是不确定的。

2、InputStream.available();:返回的值是一个估算值.不能依赖这个值来分配空间

3、获取压缩文件的准确长度方法:

   InputStream is = this.getAssets().open("data.zip");

  while( is.skip(65536) > 0 ) { };//通过循环跳到文件尾获取

 

一、在SD卡中创建解压文件存放目录:

File file =new File("/sdcard/mydata");

file.mkdirs();

二、打开资源文件

InputStream inputStream = this.getAssets().open("data.zip");

getAssets():获取assets资源管理器,AssetsManager.

通过资源管理器打开Assets目录中的资源文件“data.zip”:

三、根据资源文件输入流构造一个压缩包输入流
  ZipInputStream zip = new ZipInputStream(stream);

四、解压文件到先前创建的目录,伪代码如下:

while(true)
{
	//取得压缩文件的一个个子元素,同时流指针也定位到该文件的开头
	ZipEntry entry = zip.getNextEntry();
	//如果元素为空,表明压缩文件已经读取完毕
	if( entry == null )
				break;

	//如果是目录,则创建相应目录结构,接着直接读取下一个元素
	if( entry.isDirectory() )
	{		
		(new File("/sdcard/mydata/dir" )).mkdirs();		
		continue;
	}
			
	//如果是文件,在SD卡的指定目录创建该节点文件	
	OutputStream out = new FileOutputStream( path );
			
	//从zip输入流中读取文件,并写到输出流
	
	//读取当前元素:通过zip.getNextEntry(),流指针已经定位到要读的文件
	int len = zip.read(buf);
	while (len >= 0)
	{
		if(len > 0)
		   out.write(buf, 0, len);//将当前元素的内容拷贝到目标文件
		len = zip.read(buf);
				
	}
	//数据写入磁盘,并关闭输出流
	out.flush();
	out.close();
	out = null;			
}
stream.close();//解压完毕后,一定要关闭这个压缩输入流。

 

抱歉!评论已关闭.