/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 . ĠK w ai , ĠInc . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ* Ġ@ author ĠK O OM ĠTeam Ċ Ġ* Ċ Ġ*/ Ċ package Ġcom . kw ai . k oom . base Ċ Ċ import Ġjava . io . File Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . util . zip . Zip Entry Ċ import Ġjava . util . zip . Zip OutputStream Ċ Ċ /** Ċ Ġ* Ġ åİĭç¼© æĹ¶ åıª ä¿ĿçķĻ æľĢåĲİ ä¸Ģ çº§ æĸĩä»¶ åĲį ï¼Į ä¸į ä¿ĿçķĻ è·¯å¾Ħ ï¼Į ä¸įåĲĮ è·¯å¾Ħ ä¸ĭçļĦ éĩį åĲį æĸĩä»¶ ä¼ļ è¢« è¦ĨçĽĸ Ċ Ġ*/ Ċ const Ġval ĠZIP _ LAST _ PATH _ NAME Ġ= Ġ- 1 Ċ Ċ /** Ċ Ġ* Ġ åİĭç¼© æĹ¶ ä¿ĿçķĻ åİŁå§ĭ çĽ®å½ķ ç»ĵæŀĦ Ċ Ġ*/ Ċ const Ġval ĠZIP _ FULL _ PATH _ NAME Ġ= Ġ 0 Ċ Ċ fun ĠFile . zip To ( zip File : ĠFile , Ġzip Type : ĠInt Ġ= ĠZIP _ LAST _ PATH _ NAME ) Ġ{ ĊĠ Ġif Ġ( isFile ) Ġ{ ĊĠĠĠ Ġarray ListOf ( this ). zip To ( zip File . absolute Path , Ġzip Type ) ĊĠ Ġ} Ġelse Ġif Ġ( isDirectory ) Ġ{ ĊĠĠĠ Ġarray ListOf < File >(). apply Ġ{ Ġbuild Src FileList ( this ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. zip To ( zip File . absolute Path , Ġzip Type ) ĊĠ Ġ} Ċ } Ċ Ċ fun ĠList < File >. zip To ( zip FilePath : ĠString , Ġzip Type : ĠInt Ġ= ĠZIP _ LAST _ PATH _ NAME ) Ġ{ ĊĠ ĠZip OutputStream ( File OutputStream ( zip FilePath )). use Ġ{ Ġout Ġ-> ĊĠĠĠ Ġfor Ġ( file Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġfile . absolute Path ĊĊĠĠĠĠĠ Ġif Ġ( zip Type Ġ== ĠZIP _ LAST _ PATH _ NAME ) Ġ{ ĊĠĠĠĠĠĠĠ ĠZip Entry ( filePath . substring ( filePath . lastIndexOf ("/") Ġ+ Ġ 1 )) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠZip Entry ( filePath ) ĊĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠ Ġout . put Next Entry ( it ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ ĠFileInputStream ( file ). use Ġ{ Ġit . copy To ( out ) Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ fun ĠFile . read First Line (): ĠString ? Ġ{ ĊĠ Ġuse Lines Ġ{ Ġreturn Ġit . first OrNull () Ġ} Ċ } Ċ Ċ private Ġfun ĠFile . build Src FileList ( src FileList : ĠMutable List < File >) Ġ{ ĊĠ Ġfor Ġ( file Ġin Ġlist Files (). or Empty ()) Ġ{ ĊĠĠĠ Ġif Ġ( file . isDirectory ) Ġ{ ĊĠĠĠĠĠ Ġfile . build Src FileList ( src FileList ) ĊĠĠĠ Ġ} Ġelse Ġif Ġ( file . isFile ) Ġ{ ĊĠĠĠĠĠ Ġsrc FileList . add ( file ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }