/* Ċ Ġ* ĠFX GL Ġ- ĠJava FX ĠGame ĠLibrary . ĠThe ĠMIT ĠLicense Ġ( MIT ). Ċ Ġ* ĠCopyright Ġ( c ) ĠAl mas B Ġ( al mas lvl @ gmail . com ). Ċ Ġ* ĠSee ĠLICENSE Ġfor Ġdetails . Ċ Ġ*/ Ċ Ċ package Ġcom . al mas b . fx gl . io Ċ Ċ import Ġcom . al mas b . fx gl . core . logging . Logger Ċ import Ġjava . io .* Ċ import Ġjava . nio . file .* Ċ import Ġjava . nio . file . attribute . Basic File Attributes Ċ import Ġjava . util . stream . Collectors Ċ Ċ /** Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġ@ author ĠAl mas ĠB aim ag amb et ov Ġ( al mas lvl @ gmail . com ) Ċ Ġ*/ Ċ internal Ġclass ĠDesktop FS Service Ġ: ĠFS Service Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLogger . get ( java Class ) ĊĊĠĠĠ Ġoverride Ġfun Ġexists ( path Name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFiles . exists ( Paths . get ( path Name )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Directory ( dir Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdir Ġ= ĠPaths . get ( dir Name ) ĊĊĠĠĠĠĠĠĠ ĠFiles . create Directories ( dir ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite Data ( data : ĠSerializable , ĠfileName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠPaths . get ( fileName ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġif Ġfile . parent Ġis Ġnull Ġwe Ġwill Ġuse Ġcurrent Ġdir , Ġwhich Ġexists ĊĠĠĠĠĠĠĠ Ġif Ġ( file . parent Ġ!= Ġnull Ġ&& Ġ! Files . exists ( file . parent )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Creating Ġdirectories Ġto : Ġ${ file . parent }") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . create Directories ( file . parent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠObject OutputStream ( Files . new OutputStream ( file )). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Writing Ġto : Ġ$ file ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . write Object ( data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite Data ( text : ĠList < String >, ĠfileName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠPaths . get ( fileName ) ĊĊĠĠĠĠĠĠĠ ĠFiles . write ( file , Ġtext ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġ< T > Ġread Data ( fileName : ĠString ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠPaths . get ( fileName ) ĊĊĠĠĠĠĠĠĠ Ġcheck Exists ( file ) ĊĊĠĠĠĠĠĠĠ ĠObject InputStream ( Files . new InputStream ( file )). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Reading Ġfrom : Ġ$ file ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit . read Object () Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload File Names ( dir Name : ĠString , Ġrecursive : ĠBoolean ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdir Ġ= ĠPaths . get ( dir Name ) ĊĊĠĠĠĠĠĠĠ Ġcheck Exists ( dir ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠFiles . walk ( dir , Ġif Ġ( recursive ) ĠInt . MAX _ VALUE Ġelse Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĠFiles . is Regular File ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġdir . rel ativ ize ( it ). toString (). replace ("\\ ", Ġ"/") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( Collectors . toList < String >()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload File Names ( dir Name : ĠString , Ġrecursive : ĠBoolean , Ġextensions : ĠList < File Extension >): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdir Ġ= ĠPaths . get ( dir Name ) ĊĊĠĠĠĠĠĠĠ Ġcheck Exists ( dir ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠFiles . walk ( dir , Ġif Ġ( recursive ) ĠInt . MAX _ VALUE Ġelse Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġfile Ġ-> ĠFiles . is Regular File ( file ) Ġ&& Ġextensions . filter Ġ{ Ġ"$ file ". endsWith ( it . extension ) Ġ}. isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġdir . rel ativ ize ( it ). toString (). replace ("\\ ", Ġ"/") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( Collectors . toList < String >()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Directory Names ( dir Name : ĠString , Ġrecursive : ĠBoolean ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdir Ġ= ĠPaths . get ( dir Name ) ĊĊĠĠĠĠĠĠĠ Ġcheck Exists ( dir ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠFiles . walk ( dir , Ġif Ġ( recursive ) ĠInt . MAX _ VALUE Ġelse Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĠFiles . isDirectory ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġdir . rel ativ ize ( it ). toString (). replace ("\\ ", Ġ"/") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( Collectors . toList < String >()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload LastModified FileName ( dir Name : ĠString , Ġrecursive : ĠBoolean ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdir Ġ= ĠPaths . get ( dir Name ) ĊĊĠĠĠĠĠĠĠ Ġcheck Exists ( dir ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠFiles . walk ( dir , Ġif Ġ( recursive ) ĠInt . MAX _ VALUE Ġelse Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĠFiles . is Regular File ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted Ġ{ Ġfile 1 , Ġfile 2 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( file 2 . to File (). lastModified () Ġ- Ġfile 1 . to File (). lastModified ()). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. findFirst () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġdir . rel ativ ize ( it ). toString (). replace ("\\ ", Ġ"/") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. orElse Throw Ġ{ ĠFileNotFoundException (" No Ġfiles Ġfound Ġin Ġ$ dir ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete File ( fileName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠPaths . get ( fileName ) ĊĊĠĠĠĠĠĠĠ Ġcheck Exists ( file ) ĊĊĠĠĠĠĠĠĠ Ġlog . debug (" Deleting Ġfile : Ġ$ file ") ĊĊĠĠĠĠĠĠĠ ĠFiles . delete ( file ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Directory ( dir Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdir Ġ= ĠPaths . get ( dir Name ) ĊĊĠĠĠĠĠĠĠ Ġcheck Exists ( dir ) ĊĊĠĠĠĠĠĠĠ ĠFiles . walk File Tree ( dir , Ġobject Ġ: ĠSimple File Visitor < Path >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit File ( file : ĠPath , Ġp 1 : ĠBasic File Attributes ): ĠFile Visit Result Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Deleting Ġfile : Ġ$ file ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFile Visit Result . CONTINUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpost Visit Directory ( directory : ĠPath , Ġe : ĠIOException ?): ĠFile Visit Result Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Deleting Ġdirectory : Ġ$ directory ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete ( directory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFile Visit Result . CONTINUE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Exists ( path : ĠPath ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! Files . exists ( path )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFileNotFoundException (" Path Ġ$ path Ġdoes Ġnot Ġexist ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }