package Ġmo hs en . coder Ċ Ċ import Ġkotlinx . coroutines . Deferred Ċ import Ġkotlinx . coroutines . Del icate Cor outines Api Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . async Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ import Ġkotlin . io . path .* Ċ import Ġkotlin . math . floor Ċ import Ġkotlin . math . ln Ċ import Ġkotlin . math . pow Ċ import Ġkotlin . math . round Ċ Ċ class ĠFolder ( path : ĠString ) Ġ: ĠIF older Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġfolder Path : ĠPath ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Path Ġ= ĠPaths . get ( System . getProperty (" user . dir ")) ĊĠĠĠĠĠĠĠ Ġfolder Path Ġ= ĠPaths . get ( current Path . toString (), Ġif Ġ( path Ġ== Ġ"./ ") Ġ"" Ġelse Ġpath ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! Files . isDirectory ( folder Path )) Ġthrow ĠIllegalArgumentException (" Entered Ġpath Ġis Ġnot Ġa Ġfolder Ġpath !") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġhttps :// stackoverflow . com / questions / 1 5 9 0 0 4 8 5 / correct - way - to - convert - size - in - bytes - to - kb - mb - gb - in - javascript ĊĠĠĠ Ġprivate Ġfun Ġformat Bytes ( bytes : ĠLong , Ġdecimals : ĠInt Ġ= Ġ 2 ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bytes Ġ== Ġ 0 L ) Ġreturn Ġ" 0 ĠBytes " ĊĊĠĠĠĠĠĠĠ Ġval Ġk Ġ= Ġ 1 0 2 4 f ĊĠĠĠĠĠĠĠ Ġval Ġdm Ġ= Ġif Ġ( decimals Ġ< Ġ 0 ) Ġ 0 Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcounter Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( decimals Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter Ġ*= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsizes Ġ= Ġarray ListOf (" Bytes ", Ġ" KB ", Ġ" MB ", Ġ" GB ", Ġ" TB ", Ġ" PB ", Ġ" EB ", Ġ" ZB ", Ġ" Y B ") ĊĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġfloor ( ln ( bytes . toDouble ()) Ġ/ Ġln ( k )) ĊĊĠĠĠĠĠĠĠ Ġval ĠfileSize In Decimal Ġ= Ġround (( bytes Ġ/ Ġk . toDouble (). pow ( i )) Ġ* Ġdm ) Ġ/ Ġdm ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ file Size In Decimal Ġ${ sizes [ i . toInt () ]} "; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Folder ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFiles . create Directory ( folder Path . resolve ( name )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Opt In ( Del icate Cor outines Api :: class ) ĊĠĠĠ Ġoverride Ġfun Ġcreate Folder Async ( name : ĠString ): ĠDeferred < Unit > Ġ= ĠGlobal Scope . async Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Folder ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfolder Content (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfolder Path . list Directory Entries (). map Ġ{ Ġit . name Ġ}. toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Opt In ( Del icate Cor outines Api :: class ) ĊĠĠĠ Ġoverride Ġfun Ġfolder Content Async (): ĠDeferred < List < String >> Ġ= ĠGlobal Scope . async { ĊĠĠĠĠĠĠĠ Ġfolder Content () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Child File ( fileName : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfolder Path . resolve ( fileName ). to File () ĊĠĠĠĠĠĠĠ Ġreturn Ġfile . delete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Opt In ( Del icate Cor outines Api :: class ) ĊĠĠĠ Ġoverride Ġfun Ġremove Child File Async ( fileName : ĠString ): ĠDeferred < Boolean > Ġ= ĠGlobal Scope . async Ġ{ ĊĠĠĠĠĠĠĠ Ġremove Child File ( fileName ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Child Folder ( folder Name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdirectory Ġ= Ġfolder Path . resolve ( folder Name ). to File () ĊĠĠĠĠĠĠĠ Ġif Ġ(! directory . isDirectory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException (" can Ġnot Ġremove Ġthis Ġfolder !") ĊĠĠĠĠĠĠĠ Ġreturn Ġdirectory . delete Re cursively () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Opt In ( Del icate Cor outines Api :: class ) ĊĠĠĠ Ġoverride Ġfun Ġremove Child Folder Async ( folder Name : ĠString ): ĠDeferred < Boolean > Ġ= ĠGlobal Scope . async Ġ{ ĊĠĠĠĠĠĠĠ Ġremove Child Folder ( folder Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Folder (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! folder Path . isDirectory ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException (" Can Ġnot Ġremove Ġthis Ġfolder !") Ċ // ĠĠĠĠĠĠĠ Ġfolder Path . to File (). walk Top Down (). map Ġ{ Ġit . delete () Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfolder Path . to File (). delete Re cursively () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Opt In ( Del icate Cor outines Api :: class ) ĊĠĠĠ Ġoverride Ġfun Ġremove Folder Async (): ĠDeferred < Boolean > Ġ= ĠGlobal Scope . async Ġ{ ĊĠĠĠĠĠĠĠ Ġremove Folder () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrename Child File ( child Old Name : String , Ġchild New Name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild File Ġ= Ġfolder Path . resolve ( child Old Name ). to File () ĊĠĠĠĠĠĠĠ Ġif Ġ(! child File . isFile ) Ġthrow ĠIOException (" Can Ġnot Ġrename Ġthis Ġfile !") ĊĠĠĠĠĠĠĠ Ġreturn Ġchild File . rename To ( folder Path . resolve ("$ child New Name .${ child File . extension } "). to File ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Opt In ( Del icate Cor outines Api :: class ) ĊĠĠĠ Ġoverride Ġfun Ġrename Child File Async ( child Old Name : String , Ġchild New Name : ĠString ): ĠDeferred < Boolean > Ġ= ĠGlobal Scope . async Ġ{ ĊĠĠĠĠĠĠĠ Ġrename Child File ( child Old Name , Ġchild New Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrename Child Folder ( child Old Name : String , Ġchild New Name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild File Ġ= Ġfolder Path . resolve ( child Old Name ). to File () ĊĠĠĠĠĠĠĠ Ġif Ġ(! child File . isDirectory ) Ġthrow ĠIOException (" Can Ġrename Ġthis Ġfolder !") ĊĠĠĠĠĠĠĠ Ġreturn Ġchild File . rename To ( folder Path . resolve ( child New Name ). to File ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Opt In ( Del icate Cor outines Api :: class ) ĊĠĠĠ Ġoverride Ġfun Ġrename Child Folder Async ( child Old Name : String , Ġchild New Name : ĠString ): ĠDeferred < Boolean > Ġ= ĠGlobal Scope . async Ġ{ ĊĠĠĠĠĠĠĠ Ġrename Child Folder ( child Old Name , Ġchild New Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrename Folder ( new Name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! folder Path . isDirectory ()) Ġthrow ĠIOException (" Can Ġnot Ġrename Ġthis Ġfolder !") ĊĠĠĠĠĠĠĠ Ġreturn Ġfolder Path . to File (). rename To ( folder Path . parent . resolve ( new Name ). to File ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Opt In ( Del icate Cor outines Api :: class ) ĊĠĠĠ Ġoverride Ġfun Ġrename Folder Async ( new Name : ĠString ): ĠDeferred < Boolean > Ġ= ĠGlobal Scope . async { ĊĠĠĠĠĠĠĠ Ġrename Folder ( new Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Folder Size ( file : Ġjava . io . File ): ĠString { ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġfile . walk Top Down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isFile Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . length () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sum () ĊĠĠĠĠĠĠĠ Ġreturn Ġformat Bytes ( size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Folder Size (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Folder Size ( folder Path . to File ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Folder Child Size ( child Path : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfolder Path . resolve ( child Path ). to File () ĊĠĠĠĠĠĠĠ Ġif Ġ( file . isDirectory ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Folder Size ( file ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġformat Bytes ( file . to Path (). file Size ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Folder Name (): ĠString { ĊĠĠĠĠĠĠĠ Ġreturn Ġfolder Path . name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Folder Owner (): ĠString { ĊĠĠĠĠĠĠĠ Ġreturn Ġfolder Path . getOwner ()?. name Ġ?: Ġ" without Ġowner " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetPath String (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfolder Path . absolute Path String () ĊĠĠĠ Ġ} Ċ }