android解凍zipパッケージ


プロジェクトにはzipパッケージを解凍する必要があります.あるいはプロジェクトassetsのzipパッケージを携帯電話のSDカードにコピーして解凍します.ここで私はantを使っています.JArこのライブラリ:ant.jar
くだらないことは言わないで、直接ツール類と使用方法を添付します.
public class UnZip{

    /** *    assets        sd  * @param context */
    public static void CopyAssets(Context context, String zipName) {
        AssetManager assetManager = context.getAssets();

        InputStream in = null;
        OutputStream out = null;
        try {
            in = assetManager.open(zipName);
            out = new FileOutputStream(
                    android.os.Environment.getExternalStorageDirectory() + "/"
                            + zipName);
            CopyFile(in, out);
            in.close();
            in = null;
            out.flush();
            out.close();
            out = null;
        } catch (Exception e) {
            Log.e("Test", e.getMessage());
        }
    }

    private static void CopyFile(InputStream in, OutputStream out) throws IOException {
        byte[] buf = new byte[1024];
        int n;
        while ((n = in.read(buf)) != -1) {
            out.write(buf, 0, n);
        }
    }

    /** *     zip   * * @param unZipfile *         * @param destFile *            */
    public static void unZip(Context context, String unZipfile, String destFile)
            throws IOException, FileNotFoundException, ZipException {

        BufferedInputStream bi;
        ZipFile zipFile = new ZipFile(new File(unZipfile), "GBK");

        @SuppressWarnings("rawtypes")
        Enumeration e = zipFile.getEntries();
        while (e.hasMoreElements()) {
            ZipEntry ze2 = (ZipEntry) e.nextElement();
            String entryName = ze2.getName();
            String path = destFile + "/" + entryName;
            if (ze2.isDirectory()) {
                System.out.println("         - " + entryName);
                File decompressDirFile = new File(path);
                if (!decompressDirFile.exists()) {
                    decompressDirFile.mkdirs();
                }
            } else {
                System.out.println("         - " + entryName);
                String fileDir = path.substring(0, path.lastIndexOf("/"));
                File fileDirFile = new File(fileDir);
                if (!fileDirFile.exists()) {
                    fileDirFile.mkdirs();
                }
                BufferedOutputStream bos = new BufferedOutputStream(
                        new FileOutputStream(destFile + "/" + entryName));
                bi = new BufferedInputStream(zipFile.getInputStream(ze2));
                byte[] readContent = new byte[1024];
                int readCount = bi.read(readContent);
                while (readCount != -1) {
                    bos.write(readContent, 0, readCount);
                    readCount = bi.read(readContent);
                }
                bos.close();
            }
        }
        zipFile.close();
    }

    /** *      * * @param srcFile *              * @param destFile *          */
    public static void doZip(String srcFile, String destFile) {// zipDirectoryPath:         
        File zipFile = new File(srcFile);
        try {
            //   ZipOutputStream,                  ,          
            ZipOutputStream zipOut = new ZipOutputStream(
                    new BufferedOutputStream(new FileOutputStream(destFile)));
            //        
            zipOut.setComment("comment");
            //        ,            ,       
            zipOut.setEncoding("GBK");
            //     
            zipOut.setMethod(ZipOutputStream.DEFLATED);

            //          ,         
            zipOut.setLevel(Deflater.BEST_COMPRESSION);

            handleFile(zipFile, zipOut, "");
            //              
            zipOut.close();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }

    /** *  doZip  ,           * * @param zipFile * @param zipOut * @param dirName *                         * @throws IOException */
    private static void handleFile(File zipFile, ZipOutputStream zipOut, String dirName)
            throws IOException {
        System.out.println("    :" + zipFile.getName());
        //        ,   
        if (zipFile.isDirectory()) {
            File[] files = zipFile.listFiles();

            if (files.length == 0) {//       ,      .
                //            
                zipOut.putNextEntry(new ZipEntry(dirName + zipFile.getName()
                        + File.separator));
                zipOut.closeEntry();
            } else {//        ,     ,       
                for (File file : files) {
                    //     ,        
                    handleFile(file, zipOut, dirName + zipFile.getName()
                            + File.separator);
                }
            }
        }
        //      ,     
        else {
            FileInputStream fileIn = new FileInputStream(zipFile);
            //     ZipEntry
            zipOut.putNextEntry(new ZipEntry(dirName + zipFile.getName()));
            int length = 0;
            byte[] buffer = new byte[1024];
            //         
            while ((length = fileIn.read(buffer)) > 0) {
                zipOut.write(buffer, 0, length);
            }
            //   ZipEntry,         
            zipOut.closeEntry();
        }

    }
}

シーン1、プロジェクトassetsフォルダからzipパッケージを携帯電話sdカードにコピーして解凍します.
1、まずzipパッケージをsdカードにコピーする:UnZip.CopyAssets(this, xxx.zip);‘xxx.zip’パラメータは圧縮パケットの名前に接尾辞を付け、ここで私のパケットはassetsルートディレクトリに配置され、sdカードルートディレクトリにコピーされます.
2、sdカードにコピーしたzipパッケージを解凍する:UnZip.unZip(this, ZipFileName, UnZipLocation);
'ZipFileName'   zip       ,
 :android.os.Environment.getExternalStorageDirectory() + "/xxx.zip"
'UnZipLocation'           ,
 :android.os.Environment.getExternalStorageDirectory() + "/"

これでzipパッケージがプロジェクトからsdにコピーされ、解凍されます.もちろん実際の項目ではメモリカードがあるかどうか、ファイルがあるかどうかなども判断しなければなりません.
シーン2、sdカードのフォルダをzipパッケージに圧縮する:UnZip.doZip(FileName, ZipFileName);
「FileName」は、サブファイルやサブフォルダがどれだけ入っていてもsdカードのフォルダパスです.ここで私の経路はos.Environment.getExternalStorageDirectory()+"/フォルダ名"
「ZipFileName」はzipパッケージに圧縮する必要があるパスです.例えば:android.os.Environment.getExternalStorageDirectory()+"/フォルダ名.zip"
はい、ファイルの解凍操作は大体これだけです.