Android Zip解压带进度回调

xiaoxiao2021-03-01  62

public interface IProgress { void onProgress(int progress); void onError(String msg); void onDone(); } private static long getZipSize(String filePath){ long size = 0; ZipFile f; try { f = new ZipFile(filePath); Enumeration<? extends ZipEntry> en = f.entries(); while (en.hasMoreElements()) { size += en.nextElement().getSize(); } } catch (IOException e) { size = 0; } return size; } public static void unZip(String filePath, String outPath,IProgress iProgress){ if(!FileUtil.getInstance().isFileExist(filePath)){ iProgress.onError("zip不存在 " + filePath); return; } long zipLength = getZipSize(filePath); ZipInputStream zipInputStream = null; try { zipInputStream = new ZipInputStream(new FileInputStream(filePath)); if(zipInputStream == null || zipInputStream.available() == 0){ iProgress.onError("zip错误"); return; } ZipEntry zipEntry; String szName = ""; long count = 0; while ((zipEntry = zipInputStream.getNextEntry()) != null) { szName = zipEntry.getName(); String currentParentFile = ""; if (zipEntry.isDirectory()) { szName = szName.substring(0, szName.length() - 1); currentParentFile = outPath + File.separator + szName; new File(currentParentFile).mkdirs(); } else { File file = new File(outPath + "/" + szName); if (!file.exists()){ file.getParentFile().mkdirs(); file.createNewFile(); } // 获取文件的输出流 FileOutputStream out = new FileOutputStream(file); int len; byte[] buffer = new byte[1024]; // 读取(字节)字节到缓冲区 while ((len = zipInputStream.read(buffer)) != -1) { count += len; int progress = (int)((count * 100)/zipLength) ; iProgress.onProgress(progress); // 从缓冲区(0)位置写入(字节)字节 out.write(buffer, 0, len); out.flush(); } out.close(); } } iProgress.onDone(); }catch (Exception exc){ iProgress.onError(exc.getMessage()); }finally { try { zipInputStream.close(); FileUtil.getInstance().deleteFile(filePath); } catch (IOException e) { iProgress.onError(e.getMessage()); } } }

 

转载请注明原文地址: https://www.6miu.com/read-4549937.html

最新回复(0)