/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠO liver ĠB erg Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ Ċ @ file : Jvm Mult if ile Class Ċ @ file : Jvm Name (" K Files ") Ċ Ċ package Ġmo e . kan on . kom mon s . io . paths Ċ Ċ import Ġmo e . kan on . kom mon s . OS _ NAME Ċ import Ġmo e . kan on . kom mon s . USER _ HOME Ċ import Ġmo e . kan on . kom mon s . get Env Ċ import Ġjava . nio . file . Path Ċ Ċ /* Ċ Ġ* ĠThis Ġimplementation Ġis Ġbased Ġon / insp ired Ġby Ġhttps :// github . com / har aw ata / app dirs Ġand Ġhttps :// github . com / er ay erd in / k app dirs Ċ Ġ* Ġbut Ġwith Ġthe Ġintention Ġof Ġbeing Ġa Ġlot Ġ" simp ler " Ġby Ġgetting Ġrid Ġof Ġthe Ġextra Ġ' version ' Ġand Ġ' author ' Ġparameters , Ġas Ċ Ġ* Ġthose Ġcan Ġeasily Ġbe Ġadded Ġby Ġthe Ġuser Ġif Ġthey Ġso Ġfeel Ġlike Ġit Ġand Ġby Ġ" h iding " Ġthe Ġactual Ġ" factories " Ġbehind Ġsimple Ċ Ġ* Ġtop - level Ġfunctions . Ċ Ġ*/ Ċ // Ġthis Ġclass Ġis Ġessentially Ġan Ġenum , Ġbut Ġmade Ġin Ġa Ġway Ġso Ġthat Ġwe Ġcan Ġhide Ġthe Ġsing letons Ġand Ġonly Ġpresent Ġthe Ġuser Ċ // Ġwith Ġthe Ġgenerated Ġinstance Ġthat Ġwe Ġwant Ġto Ġshow . Ċ sealed Ġclass ĠApp Dirs ( private Ġval Ġname : ĠString ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE : ĠApp Dirs Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġos Ġ= ĠOS _ NAME . toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġos . startsWith (" windows ") Ġ-> ĠWindows ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġos . startsWith (" mac Ġos Ġx ") Ġ-> ĠMac Os X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassume Ġit 's Ġsome Ġ* nix Ġbased Ġsystem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠUnix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" getInstance ") ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġoperator Ġfun Ġinvoke (): ĠApp Dirs Ġ= ĠINSTANCE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġget UserData Dir ( name : ĠString , Ġro aming : ĠBoolean ): ĠPath ĊĊĠĠĠ Ġabstract Ġfun ĠgetUser Config Dir ( name : ĠString , Ġro aming : ĠBoolean ): ĠPath ĊĊĠĠĠ Ġabstract Ġfun ĠgetUser Cache Dir ( name : ĠString ): ĠPath ĊĊĠĠĠ Ġabstract Ġfun ĠgetUser Log Dir ( name : ĠString ): ĠPath ĊĊĠĠĠ Ġabstract Ġfun Ġget Site Data Dir ( name : ĠString , Ġlocal : ĠBoolean ): ĠPath ĊĊĠĠĠ Ġabstract Ġfun Ġget Site Config Dir ( name : ĠString ): ĠPath ĊĊĠĠĠ Ġfinal Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" App Dirs {$ name }" ĊĊĠĠĠ Ġprivate Ġobject ĠMac Os X Ġ: ĠApp Dirs (" Mac ĠOS ĠX ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget UserData Dir ( name : ĠString , Ġro aming : ĠBoolean ): ĠPath Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Of ( USER _ HOME , Ġ" Library ", Ġ" Application ĠSupport ", Ġname ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetUser Config Dir ( name : ĠString , Ġro aming : ĠBoolean ): ĠPath Ġ= Ġget UserData Dir ( name , Ġro aming ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetUser Cache Dir ( name : ĠString ): ĠPath Ġ= Ġpath Of ( USER _ HOME , Ġ" Library ", Ġ" Caches ", Ġname ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetUser Log Dir ( name : ĠString ): ĠPath Ġ= Ġpath Of ( USER _ HOME , Ġ" Library ", Ġ" Logs ", Ġname ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Site Data Dir ( name : ĠString , Ġlocal : ĠBoolean ): ĠPath Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Of ("/", Ġ" Library ", Ġ" Application ĠSupport ", Ġname ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Site Config Dir ( name : ĠString ): ĠPath Ġ= Ġget Site Data Dir ( name , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġobject ĠUnix Ġ: ĠApp Dirs ("* nix ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget UserData Dir ( name : ĠString , Ġro aming : ĠBoolean ): ĠPath Ġ= Ġpath Of ( USER _ HOME , Ġ". local ", Ġ" share ", Ġname ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetUser Config Dir ( name : ĠString , Ġro aming : ĠBoolean ): ĠPath Ġ= Ġpath Of ( USER _ HOME , Ġ". config ", Ġname ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetUser Cache Dir ( name : ĠString ): ĠPath Ġ= Ġpath Of ( USER _ HOME , Ġ". cache ", Ġname ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetUser Log Dir ( name : ĠString ): ĠPath Ġ= Ġpath Of ( USER _ HOME , Ġ". cache ", Ġname , Ġ" logs ") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Site Data Dir ( name : ĠString , Ġlocal : ĠBoolean ): ĠPath Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( local ) Ġpath Of ("/", Ġ" usr ", Ġ" local ", Ġ" share ", Ġname ) Ġelse Ġpath Of ("/", Ġ" usr ", Ġ" share ", Ġname ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Site Config Dir ( name : ĠString ): ĠPath Ġ= Ġpath Of ("/", Ġ" etc ", Ġname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġobject ĠWindows Ġ: ĠApp Dirs (" Windows ") Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġlazy Ġso Ġthat Ġwe Ġdon 't Ġencounter Ġany Ġexceptions Ġwhen Ġthis Ġinstance Ġis Ġcreated ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġapp Data Ġby Ġlazy Ġ{ Ġget Env (" APP DATA ") Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlocal AppData Ġby Ġlazy Ġ{ Ġget Env (" LOCAL APP DATA ") Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġprogram Data Ġby Ġlazy Ġ{ Ġget Env (" PROGRAM DATA ") Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget UserData Dir ( name : ĠString , Ġro aming : ĠBoolean ): ĠPath Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Of ( if Ġ( ro aming ) Ġapp Data Ġelse Ġlocal AppData , Ġname ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetUser Config Dir ( name : ĠString , Ġro aming : ĠBoolean ): ĠPath Ġ= Ġget UserData Dir ( name , Ġro aming ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetUser Cache Dir ( name : ĠString ): ĠPath Ġ= Ġpath Of ( local AppData , Ġname , Ġ" Cache ") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetUser Log Dir ( name : ĠString ): ĠPath Ġ= Ġpath Of ( local AppData , Ġname , Ġ" Logs ") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Site Data Dir ( name : ĠString , Ġlocal : ĠBoolean ): ĠPath Ġ= Ġpath Of ( program Data , Ġname ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Site Config Dir ( name : ĠString ): ĠPath Ġ= Ġget Site Data Dir ( name , Ġfalse ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġnewly Ġcreated Ġ[ Path ] Ġinstance Ġpointing Ġto Ġa Ġ` directory ` Ġmade Ġusing Ġthe Ġgiven Ġ[ name ], Ġthe Ġdirectory Ġis Ċ Ġ* Ġlocated Ġin Ġthe Ġcurrent Ġoperating Ġsystems Ġuser Ġdata Ġdirectory . Ċ Ġ* Ċ Ġ* Ġ@ param Ġ[ appName ] Ġthe Ġname Ġof Ġthe Ġapplication Ġto Ġcreate Ġthe Ġdirectory Ġfor Ċ Ġ* Ġ@ param Ġ[ ro aming ] ĠWhether Ġor Ġnot Ġthe Ġdirectory Ġshould Ġbe Ġcreated Ġin Ġthe Ġ` ro aming ` Ġdirectory . Ċ Ġ* Ċ Ġ* Ġ** Only Ġused Ġon ĠWindows .** Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġnewly Ġcreated Ġdirectory Ċ Ġ*/ Ċ @ Jvm Over loads Ġfun Ġcreate Data Directory ( appName : ĠString , Ġro aming : ĠBoolean Ġ= Ġtrue ): ĠPath Ġ= ĊĠĠĠ ĠApp Dirs (). getUser Data Dir ( appName , Ġro aming ). create Directories () Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġnewly Ġcreated Ġ[ Path ] Ġinstance Ġpointing Ġto Ġa Ġ` directory ` Ġmade Ġusing Ġthe Ġgiven Ġ[ name ], Ġthe Ġdirectory Ġis Ċ Ġ* Ġlocated Ġin Ġthe Ġcurrent Ġoperating Ġsystems Ġuser Ġconfig Ġdirectory . Ċ Ġ* Ċ Ġ* Ġ@ param Ġ[ appName ] Ġthe Ġname Ġof Ġthe Ġapplication Ġto Ġcreate Ġthe Ġdirectory Ġfor Ċ Ġ* Ġ@ param Ġ[ ro aming ] ĠWhether Ġor Ġnot Ġthe Ġdirectory Ġshould Ġbe Ġcreated Ġin Ġthe Ġ` ro aming ` Ġdirectory . Ċ Ġ* Ċ Ġ* Ġ** Only Ġused Ġon ĠWindows .** Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġnewly Ġcreated Ġdirectory Ċ Ġ*/ Ċ @ Jvm Over loads Ġfun Ġcreate Config Directory ( appName : ĠString , Ġro aming : ĠBoolean Ġ= Ġtrue ): ĠPath Ġ= ĊĠĠĠ ĠApp Dirs (). getUser Config Dir ( appName , Ġro aming ). create Directories () Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġnewly Ġcreated Ġ[ Path ] Ġinstance Ġpointing Ġto Ġa Ġ` directory ` Ġmade Ġusing Ġthe Ġgiven Ġ[ name ], Ġthe Ġdirectory Ġis Ċ Ġ* Ġlocated Ġin Ġthe Ġcurrent Ġoperating Ġsystems Ġuser Ġcache Ġdirectory . Ċ Ġ* Ċ Ġ* Ġ@ param Ġ[ appName ] Ġthe Ġname Ġof Ġthe Ġapplication Ġto Ġcreate Ġthe Ġdirectory Ġfor Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġnewly Ġcreated Ġdirectory Ċ Ġ*/ Ċ fun Ġcreate Cache Directory ( appName : ĠString ): ĠPath Ġ= ĠApp Dirs (). getUser Cache Dir ( appName ). create Directories () Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġnewly Ġcreated Ġ[ Path ] Ġinstance Ġpointing Ġto Ġa Ġ` directory ` Ġmade Ġusing Ġthe Ġgiven Ġ[ name ], Ġthe Ġdirectory Ġis Ċ Ġ* Ġlocated Ġin Ġthe Ġcurrent Ġoperating Ġsystems Ġuser Ġlog Ġdirectory . Ċ Ġ* Ċ Ġ* Ġ@ param Ġ[ appName ] Ġthe Ġname Ġof Ġthe Ġapplication Ġto Ġcreate Ġthe Ġdirectory Ġfor Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġnewly Ġcreated Ġdirectory Ċ Ġ*/ Ċ fun Ġcreate Log Directory ( appName : ĠString ): ĠPath Ġ= ĠApp Dirs (). getUser Log Dir ( appName ). create Directories ()