android从zip文件解压缩文件夹并从该文件夹中读取内容

时间:2017-09-14 12:04:08

标签: android image directory unzip

在我的一个应用程序中,我需要提取一个包含文件夹的zip文件,该文件夹包含图像,这意味着abc.zip => adb(folder)=> abc.png 我想提取图像文件

我用下面的方法

var d = "12 hours, 12 hours, 12 hours";
alert(d.substring(0, d.indexOf(","));
// shows "12 hours"

但获得 private boolean extractFolder(File destination, File zipFile) throws ZipException, IOException { int BUFFER = 8192; File file = zipFile; //This can throw ZipException if file is not valid zip archive ZipFile zip = new ZipFile(file); // String newPath = destination.getAbsolutePath() + File.separator + FilenameUtils.removeExtension(zipFile.getName()); String newPath = destination.getAbsolutePath() + File.separator + zipFile.getName(); //Create destination directory new File(newPath).mkdir(); Enumeration zipFileEntries = zip.entries(); //Iterate overall zip file entries while (zipFileEntries.hasMoreElements()) { ZipEntry entry = (ZipEntry) zipFileEntries.nextElement(); String currentEntry = entry.getName(); File destFile = new File(newPath, currentEntry); File destinationParent = destFile.getParentFile(); //If entry is directory create sub directory on file system destinationParent.mkdirs(); if (!entry.isDirectory()) { //Copy over data into destination file BufferedInputStream is = new BufferedInputStream(zip .getInputStream(entry)); int currentByte; byte data[] = new byte[BUFFER]; //orthodox way of copying file data using streams FileOutputStream fos = new FileOutputStream(destFile); BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER); while ((currentByte = is.read(data, 0, BUFFER)) != -1) { dest.write(data, 0, currentByte); } dest.flush(); dest.close(); is.close(); } } return true;//some error codes etc. }

1 个答案:

答案 0 :(得分:5)

private void unzip(String src, String dest){

        final int BUFFER_SIZE = 4096;

        BufferedOutputStream bufferedOutputStream = null;
        FileInputStream fileInputStream;
        try {
            fileInputStream = new FileInputStream(src);
            ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(fileInputStream));
            ZipEntry zipEntry;

            while ((zipEntry = zipInputStream.getNextEntry()) != null){

                String zipEntryName = zipEntry.getName();

                String name = dest.substring(dest.lastIndexOf("/")-1);

                File FileName = new File(FolderName);
                if (!FileName.isDirectory()) {
                    try {
                        if (FileName.mkdir()) {
                        } else {
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }

                File file = new File(FolderName+"/" +zipEntryName);

                if (file.exists()){

                } else {
                    if(zipEntry.isDirectory()){
                        file.mkdirs();
                    }else{
                        byte buffer[] = new byte[BUFFER_SIZE];
                        FileOutputStream fileOutputStream = new FileOutputStream(file);
                        bufferedOutputStream = new BufferedOutputStream(fileOutputStream, BUFFER_SIZE);
                        int count;

                        while ((count = zipInputStream.read(buffer, 0, BUFFER_SIZE)) != -1) {
                            bufferedOutputStream.write(buffer, 0, count);
                        }

                        bufferedOutputStream.flush();
                        bufferedOutputStream.close();
                    }
                }
            }
            zipInputStream.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

尝试此代码,它为我工作。