zoukankan      html  css  js  c++  java
  • 项目实战工具类(二):ZipUtils(压缩/解压缩文件相关)

    import android.content.Context;
    import android.util.Log;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipFile;
    import java.util.zip.ZipInputStream;
    import java.util.zip.ZipOutputStream;
    
    
    public class ZipUtils {
        public static final String TAG="ZIP";
        public ZipUtils(){
        }
    
        /**
         * 解压zip到指定的路径
         * @param zipFileString  ZIP的名称
         * @param outPathString   要解压缩路径
         * @throws Exception
         */
        public static void UnZipFolder(String zipFileString, String outPathString , Context context) throws Exception {
            ZipInputStream inZip = new ZipInputStream(new FileInputStream(zipFileString));
            ZipEntry zipEntry;
    
            String szName = "";
            while ((zipEntry = inZip.getNextEntry()) != null) {
                szName = zipEntry.getName();
                if (zipEntry.isDirectory()) {
                    //获取部件的文件夹名
                    szName = szName.substring(0, szName.length() - 1);
                    File folder = new File(outPathString + File.separator + szName);
                    folder.mkdirs();
                } else {
                    Log.e(TAG,outPathString + File.separator + szName);
                    File file = new File(outPathString + File.separator + szName);
                    if (!file.exists()){
                        Log.e(TAG, "Create the file:" + outPathString + File.separator + szName);
                        file.getParentFile().mkdirs();
                        file.createNewFile();
                    }
                    // 获取文件的输出流
                    FileOutputStream out = new FileOutputStream(file);
                    int len;
                    byte[] buffer = new byte[1024];
                    // 读取(字节)字节到缓冲区
                    while ((len = inZip.read(buffer)) != -1) {
                        // 从缓冲区(0)位置写入(字节)字节
                        out.write(buffer, 0, len);
                        out.flush();
                    }
                    out.close();
                }
            }
            inZip.close();
        }
    
        public static void UnZipFolder(String zipFileString, String outPathString, String szName) throws Exception {
            ZipInputStream inZip = new ZipInputStream(new FileInputStream(zipFileString));
            ZipEntry zipEntry;
            while ((zipEntry = inZip.getNextEntry()) != null) {
                //szName = zipEntry.getName();
                if (zipEntry.isDirectory()) {
                    //获取部件的文件夹名
                    szName = szName.substring(0, szName.length() - 1);
                    File folder = new File(outPathString + File.separator + szName);
                    folder.mkdirs();
                } else {
                    Log.e(TAG,outPathString + File.separator + szName);
                    File file = new File(outPathString + File.separator + szName);
                    if (!file.exists()){
                        Log.e(TAG, "Create the file:" + outPathString + File.separator + szName);
                        file.getParentFile().mkdirs();
                        file.createNewFile();
                    }
                    // 获取文件的输出流
                    FileOutputStream out = new FileOutputStream(file);
                    int len;
                    byte[] buffer = new byte[1024];
                    // 读取(字节)字节到缓冲区
                    while ((len = inZip.read(buffer)) != -1) {
                        // 从缓冲区(0)位置写入(字节)字节
                        out.write(buffer, 0, len);
                        out.flush();
                    }
                    out.close();
                }
            }
            inZip.close();
        }
    
        /**
         * 压缩文件和文件夹
         * @param srcFileString   要压缩的文件或文件夹
         * @param zipFileString   解压完成的Zip路径
         * @throws Exception
         */
        public static void ZipFolder(String srcFileString, String zipFileString)throws Exception {
            //创建ZIP
            ZipOutputStream outZip = new ZipOutputStream(new FileOutputStream(zipFileString));
            //创建文件
            File file = new File(srcFileString);
            //压缩
            ZipFiles(file.getParent()+ File.separator, file.getName(), outZip);
            //完成和关闭
            outZip.finish();
            outZip.close();
        }
    
        /**
         * 压缩文件
         * @param folderString
         * @param fileString
         * @param zipOutputSteam
         * @throws Exception
         */
        private static void ZipFiles(String folderString, String fileString, ZipOutputStream zipOutputSteam)throws Exception {
            if(zipOutputSteam == null)
                return;
            File file = new File(folderString+fileString);
            if (file.isFile()) {
                ZipEntry zipEntry =  new ZipEntry(fileString);
                FileInputStream inputStream = new FileInputStream(file);
                zipOutputSteam.putNextEntry(zipEntry);
                int len;
                byte[] buffer = new byte[4096];
                while((len=inputStream.read(buffer)) != -1)
                {
                    zipOutputSteam.write(buffer, 0, len);
                }
                zipOutputSteam.closeEntry();
            }
            else {
                //文件夹
                String fileList[] = file.list();
                //没有子文件和压缩
                if (fileList.length <= 0) {
                    ZipEntry zipEntry =  new ZipEntry(fileString+ File.separator);
                    zipOutputSteam.putNextEntry(zipEntry);
                    zipOutputSteam.closeEntry();
                }
                //子文件和递归
                for (int i = 0; i < fileList.length; i++) {
                    ZipFiles(folderString, fileString+ File.separator+fileList[i], zipOutputSteam);
                }
            }
        }
    
        /**
         * 返回zip的文件输入流
         * @param zipFileString  zip的名称
         * @param fileString     ZIP的文件名
         * @return InputStream
         * @throws Exception
         */
        public static InputStream UpZip(String zipFileString, String fileString)throws Exception {
            ZipFile zipFile = new ZipFile(zipFileString);
            ZipEntry zipEntry = zipFile.getEntry(fileString);
            return zipFile.getInputStream(zipEntry);
        }
    
        /**
         * 返回ZIP中的文件列表(文件和文件夹)
         * @param zipFileString     ZIP的名称
         * @param bContainFolder    是否包含文件夹
         * @param bContainFile      是否包含文件
         * @return
         * @throws Exception
         */
        public static List<File> GetFileList(String zipFileString, boolean bContainFolder, boolean bContainFile)throws Exception {
            List<File> fileList = new ArrayList<File>();
            ZipInputStream inZip = new ZipInputStream(new FileInputStream(zipFileString));
            ZipEntry zipEntry;
            String szName = "";
            while ((zipEntry = inZip.getNextEntry()) != null) {
                szName = zipEntry.getName();
                if (zipEntry.isDirectory()) {
                    // 获取部件的文件夹名
                    szName = szName.substring(0, szName.length() - 1);
                    File folder = new File(szName);
                    if (bContainFolder) {
                        fileList.add(folder);
                    }
                } else {
                    File file = new File(szName);
                    if (bContainFile) {
                        fileList.add(file);
                    }
                }
            }
            inZip.close();
            return fileList;
        }
    }

    使用:

                        // 需要解压的文件
                                    String zipFileName = Environment.getExternalStorageDirectory().getPath() + "/xxxx/resource/"+fileName;
                                    // 解压到的目录位置
                                    String zipToFilePath = Environment.getExternalStorageDirectory().getPath() + "/xxxx/"+fileName;
                                    // 解压指定文件到指定目录 ,成功后删除
                                    try {
                                        ZipUtils.UnZipFolder(zipFileName, zipToFilePath,getActivity());
                                        hasDowmResourceNum++; // 已经下载完成的资源个数+1
                                    } catch (Exception e) {
                                        e.printStackTrace();
                                        Log.i("xqxinfo","e:"+e.getMessage().toString());
                                        hasDowmErrorResourceNum++; // 下载失败的资源个数+1
                                    }
  • 相关阅读:
    beta冲刺第一天
    反射机制
    Core Java 第五章总结
    Core Java 第四章总结
    Core Java 第三章总结
    第五讲附加总结
    高博SLAM基础课第五讲——PnP非线性优化
    高博SLAM基础课第五讲——几何基础
    高博SLAM基础课第四讲——非线性优化
    高博SLAM基础课第四讲——相机模型
  • 原文地址:https://www.cnblogs.com/xqxacm/p/9999309.html
Copyright © 2011-2022 走看看