/* Ċ Ġ* ĠStack s OutputFile . kt Ċ Ġ* ĠCopyright ĠÂ© Ġ 1 9 9 3 - 2 0 2 1 , ĠThe ĠAv ail ĠFoundation , ĠLLC . Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ċ Ġ* Ġ* ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ċ Ġ* ĠĠ Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* Ġ* ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* ĠĠ Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ċ Ġ* ĠĠ Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* Ċ Ġ* Ġ* ĠNeither Ġthe Ġname Ġof Ġthe Ġcopyright Ġholder Ġnor Ġthe Ġnames Ġof Ġthe Ġcontributors Ċ Ġ* ĠĠ Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ġfrom Ġthis Ġsoftware Ċ Ġ* ĠĠ Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " Ċ Ġ* ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE Ċ Ġ* ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE Ċ Ġ* ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠHOLDER ĠOR ĠCONTRIBUTORS ĠBE Ċ Ġ* ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR Ċ Ġ* ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF Ċ Ġ* ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS Ċ Ġ* ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN Ċ Ġ* ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) Ċ Ġ* ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE Ċ Ġ* ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ Ċ package Ġcom . avail . stacks Ċ Ċ import Ġcom . avail . Avail Runtime Ċ import Ġcom . avail . utility . IO Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . nio . channels . As ynchronous File Channel Ċ import Ġjava . nio . channels . Completion Handler Ċ import Ġjava . nio . charset . StandardCharsets Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Standard Open Option Ċ import Ġjava . nio . file . attribute . Basic File Attributes Ċ import Ġjava . util . Enum Set Ċ Ċ /** Ċ Ġ* ĠThe Ġway Ġa Ġfile Ġis Ġcreated . Ċ Ġ* Ċ Ġ* Ġ@ author ĠRichard ĠAr ri aga Ġ& lt ; rich @ avail lang . org & gt ; Ċ Ġ* Ċ Ġ* Ġ@ property Ġoutput Path Ċ Ġ* ĠĠ ĠThe Ġ[ path ][ Path ] Ġto Ġthe Ġoutput Ġ[ directory ][ Basic File Attributes . isDirectory ] Ċ Ġ* ĠĠ Ġfor Ġdocumentation Ġand Ġdata Ġfiles . Ċ Ġ* Ġ@ property Ġsynchron izer Ċ Ġ* ĠĠ ĠThe Ġ[ Stack s Synchron izer ] Ġused Ġto Ġcontrol Ġthe Ġcreation Ġof ĠStack s Ċ Ġ* ĠĠ Ġdocumentation Ċ Ġ* Ġ@ property Ġname Ċ Ġ* ĠĠ ĠThe Ġname Ġof Ġthe Ġmethod Ġthe Ġfile Ġrepresents Ġas Ġit Ġis Ġrepresented Ġfrom Ġthe Ċ Ġ* ĠĠ Ġpoint Ġof Ġview Ġof Ġthe Ġmain Ġmodule Ġbeing Ġdocumented . Ċ Ġ* Ċ Ġ* Ġ@ constructor Ċ Ġ* ĠConstruct Ġa Ġnew Ġ` Stack s OutputFile `. Ċ Ġ* Ċ Ġ* Ġ@ param Ġoutput Path Ċ Ġ* ĠĠ ĠThe Ġ[ path ][ Path ] Ġto Ġthe Ġoutput Ġ[ directory ][ Basic File Attributes . isDirectory ] Ċ Ġ* ĠĠ Ġfor Ġdocumentation Ġand Ġdata Ġfiles . Ċ Ġ* Ġ@ param ĠfileName Ċ Ġ* ĠĠ ĠThe Ġname Ġof Ġthe Ġnew Ġfile Ċ Ġ* Ġ@ param Ġsynchron izer Ċ Ġ* ĠĠ ĠThe Ġ[ Stack s Synchron izer ] Ġused Ġto Ġcontrol Ġthe Ġcreation Ġof ĠStack s Ċ Ġ* ĠĠ Ġdocumentation Ċ Ġ* Ġ@ param Ġruntime Ċ Ġ* ĠĠ ĠAn Ġ[ runtime ][ Avail Runtime ]. Ċ Ġ* Ġ@ param Ġname Ċ Ġ* ĠĠ ĠThe Ġname Ġof Ġthe Ġmethod Ġthe Ġfile Ġrepresents Ġas Ġit Ġis Ġrepresented Ġfrom Ġthe Ċ Ġ* ĠĠ Ġpoint Ġof Ġview Ġof Ġthe Ġmain Ġmodule Ġbeing Ġdocumented . Ċ Ġ* Ġ@ throws ĠIOException ĠIf Ġan Ġ[ I / O Ġexception ][ IOException ] Ġoccurs . Ċ Ġ*/ Ċ class ĠStack s OutputFile Ġ@ Throws ( IOException :: class ) Ġconstructor ( Ċ ĉ val Ġoutput Path : ĠPath , Ċ ĉ val Ġsynchron izer : ĠStack s Synchron izer , Ċ ĉ fileName : ĠString , Ċ ĉ runtime : ĠAv ail Runtime , Ċ ĉ val Ġname : ĠString ) Ċ { Ċ ĉ /** Ċĉ Ġ* ĠThe Ġerror Ġlog Ġfile Ġfor Ġthe Ġmalformed Ġcomments . Ċĉ Ġ*/ Ċ ĉ private Ġvar ĠoutputFile : ĠAs ynchronous File Channel ĊĊ ĉ init Ċ ĉ { ĊĊĉ ĉ val ĠfilePath Ġ= Ġoutput Path . resolve ( fileName ) Ċĉ ĉ Files . create Directories ( output Path ) Ċĉ ĉ this . outputFile Ġ= Ġruntime . io System . open File ( Ċĉĉ ĉ filePath , ĠEnum Set . of ( Ċĉĉĉ ĉ Standard Open Option . CREATE , Ċĉĉĉ ĉ Standard Open Option . WRITE , Ċĉĉĉ ĉ Standard Open Option . TRUNC ATE _ EXIST ING )) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* Ġ@ return Ġthe Ġerror File Position Ċĉ Ġ*/ Ċ ĉ fun Ġfile (): ĠAs ynchronous File Channel Ċ ĉ { Ċĉ ĉ return ĠoutputFile Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠWrite Ġtext Ġto Ġa Ġfile . Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġoutput Text Ċĉ Ġ* ĠThe Ġtext Ġto Ġbe Ġwritten Ġto Ġfile . Ċĉ Ġ*/ Ċ ĉ @ Synchron ized Ġfun Ġwrite ( output Text : ĠString ) Ċ ĉ { Ċĉ ĉ val Ġbuffer Ġ= ĠByteBuffer . wrap ( Ċĉĉ ĉ output Text . toByteArray ( StandardCharsets . UTF _ 8 )) Ċĉ ĉ var Ġpos Ġ= Ġ 0 L Ċĉ ĉ outputFile . write < Any >( Ċĉĉ ĉ buffer , Ċĉĉ ĉ pos , Ċĉĉ ĉ null , Ċĉĉ ĉ object : ĠCompletion Handler < Int , ĠAny > Ċĉĉ ĉ { Ċĉĉĉ ĉ override Ġfun Ġcompleted ( result : ĠInt ?, Ġattachment : ĠAny ?) Ċĉĉĉ ĉ { Ċĉĉĉĉ ĉ if Ġ( buffer . has Remaining ()) Ċĉĉĉĉ ĉ { Ċĉĉĉĉĉ ĉ pos Ġ+= Ġresult !!. to Long () Ċĉĉĉĉĉ ĉ outputFile . write < Any >( buffer , Ġpos , Ġnull , Ġthis ) Ċĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ else Ċĉĉĉĉ ĉ { Ċĉĉĉĉĉ ĉ IO . close ( outputFile ) Ċĉĉĉĉĉ ĉ synchron izer . decrement Work Counter () Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } ĊĊĉĉĉ ĉ override Ġfun Ġfailed ( exc : ĠThrowable ?, Ġattachment : ĠAny ?) Ċĉĉĉ ĉ { Ċĉĉĉĉ ĉ IO . close ( outputFile ) Ċĉĉĉĉ ĉ synchron izer . decrement Work Counter () Ċĉĉĉ ĉ } Ċĉĉ ĉ }) Ċ ĉ } Ċ } Ċ