package Ġde . j ep fa . y apm . util Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Environment Ċ import Ġandroid . provider . Open able Columns Ċ import Ġandroid . util . Log Ċ import Ġjava . io .* ĊĊ Ċ /** Ċ Ġ* ĠUtils Ġto Ġwork Ġwith Ġfiles . Ċ Ġ* Ċ Ġ* Ġ@ author ĠJ ens ĠP fa hl Ċ Ġ*/ Ċ object ĠFile Util Ġ{ ĊĊĠĠĠ Ġ/** ĠChecks Ġif Ġexternal Ġstorage Ġis Ġavailable Ġfor Ġread Ġand Ġwrite Ġ Ġ*/ ĊĠĠĠ Ġfun Ġis External Storage Writable (): ĠBoolean Ġ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠEnvironment . get External Storage State () ĊĠĠĠĠĠĠĠ Ġreturn ĠEnvironment . MEDIA _ MOUNT ED Ġ== Ġstate ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠChecks Ġif Ġexternal Ġstorage Ġis Ġavailable Ġto Ġat Ġleast Ġread Ġ Ġ*/ ĊĠĠĠ Ġfun Ġis External Storage Readable (): ĠBoolean Ġ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠEnvironment . get External Storage State () ĊĠĠĠĠĠĠĠ Ġreturn ĠEnvironment . MEDIA _ MOUNT ED Ġ== Ġstate Ġ|| ĠEnvironment . MEDIA _ MOUNT ED _ READ _ ONLY Ġ== Ġstate ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠreadFile ( context : ĠContext , Ġuri : ĠUri ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Read Ġtext Ġfrom Ġfile ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= ĠStringBuilder () ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . content Resolver . open InputStream ( uri )?. use Ġ{ Ġ` is ` Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInputStreamReader (` is `). use Ġ{ Ġis r Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBufferedReader ( isr ). use Ġ{ Ġbr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġline : ĠString ? ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ= Ġbr . readLine () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext . append ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext . append ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" READ FILE ", Ġ" Cannot Ġread Ġ$ uri ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtext . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwrite File ( context : ĠContext , Ġuri : ĠUri , Ġcontent : ĠString ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . content Resolver . open OutputStream ( uri )?. use Ġ{ Ġos Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOutputStream Writer ( os ). use Ġ{ Ġo sw Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuffered Writer ( os w ). use Ġ{ Ġbw Ġ-> Ġbw . write ( content ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" READ FILE ", Ġ" Cannot Ġread Ġ$ uri ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget FileName ( context : ĠContext , Ġuri : ĠUri ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( uri . scheme Ġ== Ġ" content ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġcontext . content Resolver . query ( uri , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cursor Ġ!= Ġnull Ġ&& Ġcursor . moveTo First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġcursor . getString ( cursor . getColumnIndex ( Open able Columns . DISPLAY _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġuri . path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcut Ġ= Ġresult ?. lastIndexOf ('/') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cut Ġ!= Ġnull Ġ&& Ġcut Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult ?. substring ( cut Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ