zip/compress a folder full of files on android

前端 未结 6 953
盖世英雄少女心
盖世英雄少女心 2020-12-05 10:33

I need to zip up a \"project\" folder to allow users to share projects via email. I found a class for zipping up multiple files into one zip, but I need to keep the folder s

6条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-12-05 11:03

    public static boolean zip(File sourceFile, File zipFile) {
        List fileList = getSubFiles(sourceFile, true);
        ZipOutputStream zipOutputStream = null;
        try {
            zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFile));
            int bufferSize = 1024;
            byte[] buf = new byte[bufferSize];
            ZipEntry zipEntry;
            for(int i = 0; i < fileList.size(); i++) {
                File file = fileList.get(i);
                zipEntry = new ZipEntry(sourceFile.toURI().relativize(file.toURI()).getPath());
                zipOutputStream.putNextEntry(zipEntry);
                if (!file.isDirectory()) {
                    InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
                    int readLength;
                    while ((readLength = inputStream.read(buf, 0, bufferSize)) != -1) {
                        zipOutputStream.write(buf, 0, readLength);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            IoUtils.closeOS(zipOutputStream);
        }
        return true;
    }    
    
    public static List getSubFiles(File baseDir, boolean isContainFolder) {
        List fileList = new ArrayList<>();
        File[] tmpList = baseDir.listFiles();
        for (File file : tmpList) {
            if (file.isFile()) {
                fileList.add(file);
            }
            if (file.isDirectory()) {
                if (isContainFolder) {
                    fileList.add(file); //key code
                }
                fileList.addAll(getSubFiles(file));
            }
        }
        return fileList;
    }
    

提交回复
热议问题