android复制assets里的压缩文件到sdcard里并解压

	private static String DB_PATH = android.os.Environment
			.getExternalStorageDirectory().getAbsolutePath() + "/";
	private static String DB_NAME = "hello.zip";
	private static final int ASSETS_SUFFIX_BEGIN = 101;
	private static final int ASSETS_SUFFIX_END = 102;
	private static String ASSETS_NAME = "hello.zip";


1、复制(大于1M 需要用文件分割器分割)

private void copyBigDataBase() throws IOException {
		InputStream myInput;
		String outFileName = DB_PATH + DB_NAME;
		OutputStream myOutput = new FileOutputStream(outFileName);
		for (int i = ASSETS_SUFFIX_BEGIN; i < ASSETS_SUFFIX_END + 1; i++) {
			myInput = this.getAssets().open(ASSETS_NAME + "." + i);
			byte[] buffer = new byte[1024];
			int length;
			while ((length = myInput.read(buffer)) > 0) {
				myOutput.write(buffer, 0, length);
			}
			myOutput.flush();
			myInput.close();
		}
		myOutput.close();
	}

2、解压缩(有一级单个目录)

  public void unzipFile(String targetPath, String zipFilePath) {

        try {
            File zipFile = new File(zipFilePath);
            InputStream is = new FileInputStream(zipFile);
            ZipInputStream zis = new ZipInputStream(is);
            ZipEntry entry = null;
            System.out.println("开始解压:" + zipFile.getName() + "...");
            while ((entry = zis.getNextEntry()) != null) {
                String zipPath = entry.getName();
                try {

                    if (entry.isDirectory()) {
                        File zipFolder = new File(targetPath + File.separator
                                + zipPath);
                        if (!zipFolder.exists()) {
                            zipFolder.mkdirs();
                        }
                    } else {
                        File file = new File(targetPath + File.separator
                                + zipPath);
                        if (!file.exists()) {
                            File pathDir = file.getParentFile();
                            pathDir.mkdirs();
                            file.createNewFile();
                        }

                        FileOutputStream fos = new FileOutputStream(file);
                        int bread;
                        while ((bread = zis.read()) != -1) {
                            fos.write(bread);
                        }
                        fos.close();

                    }
                    System.out.println("成功解压:" + zipPath);

                } catch (Exception e) {
                    System.out.println("解压" + zipPath + "失败");
                    continue;
                }
            }
            zis.close();
            is.close();
            System.out.println("解压结束");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }


参考资料:

【android】assert目录下文件的大小限制 http://www.cnblogs.com/Amandaliu/archive/2011/08/22/2149803.html

http://www.cnblogs.com/som5/archive/2011/01/23/android_sqlite_assets_sdcard.html

Android中资源文件夹res/raw和assets的使用http://www.apkbus.com/android-4012-1-1.html

Android zip文件压缩解压缩
http://www.oschina.net/code/snippet_4873_4142
java中实现对zip和rar文件的解压。 
http://www.iteye.com/topic/628920
Android 解压缩 源代码
http://hi.baidu.com/%D3%DE%D6%D0%D7%F7%C0%D6/blog/item/e48eb85566990ac9b645ae2b.html

Android Zip文件解压缩代码

http://www.android123.com.cn/androidkaifa/822.html

你可能感兴趣的:(exception,android,String,sqlite,File,buffer)