/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 Ġpan pf Ġ< pan p fp an pf @ outlook . com > Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ Ċ package Ġcom . github . pan pf . tools 4 j . io . k tx Ċ Ċ import Ġcom . github . pan pf . tools 4 j . io . Copy Listener Ċ import Ġcom . github . pan pf . tools 4 j . io . IO x Ċ import Ġcom . github . pan pf . tools 4 j . reflect . k tx . getField Value Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Test Ċ import Ġjava . io .* Ċ Ċ class ĠIO x Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Safe Close () Ġ{ ĊĠĠĠĠĠĠĠ ĠByteArrayInputStream (" 1 2 3 4 5 6 7 8 9 0 ". toByteArray ()). close Quiet ly () ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠByteArrayInputStream (" 1 2 3 4 5 6 7 8 9 0 ". toByteArray ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" test ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. close Quiet ly () ĊĊĠĠĠĠĠĠĠ ĠByteArrayOutputStream (). close Quiet ly () ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠByteArrayOutputStream () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" test ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. close Quiet ly () ĊĊĠĠĠĠĠĠĠ Ġnull . close Quiet ly () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read Close () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ("/ tmp / test Read Close . txt ") ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġ" abcdef g \ n hi j kl mn \ nop q rst \ n uvw xyz " ĊĠĠĠĠĠĠĠ Ġfile . write Text ( content ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . inputStream (). let Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertFalse ( input . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( String ( input . read Bytes And Close ( IO x . DEFAULT _ BUFFER _ SIZE )), Ġcontent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( input . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . inputStream (). let Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertFalse ( input . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( String ( input . read Bytes And Close ()), Ġcontent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( input . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . reader (). let Ġ{ Ġreader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġreader . getField Value < Any >(" sd ") !!. getField Value < FileInputStream >(" in ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertFalse ( input . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( reader . read Text And Close (), Ġcontent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( input . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . delete Re cursively () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Write Close () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ("/ tmp / test Write Close . txt ") ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġ" abcdef g " ĊĠĠĠĠĠĠĠ Ġval Ġcontent Bytes Ġ= Ġcontent . toByteArray () ĊĠĠĠĠĠĠĠ Ġval Ġcontent Chars Ġ= Ġcontent . toCharArray () ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . output Stream (). let Ġ{ Ġoutput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertFalse ( output . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . write Byte And Close ( content Bytes [ 0 ]. toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( output . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( content Bytes [ 0 ], Ġfile . inputStream (). read Bytes ()[ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . output Stream (). let Ġ{ Ġoutput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertFalse ( output . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . write Bytes And Close ( content Bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( output . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( content Bytes , Ġfile . inputStream (). read Bytes ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . output Stream (). let Ġ{ Ġoutput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertFalse ( output . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . write Bytes And Close ( content Bytes , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( output . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( content Bytes . slice Array ( 2 .. 4 ), Ġfile . inputStream (). read Bytes ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . writer (). let Ġ{ Ġwriter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġwriter . getField Value < Any >(" se ") !!. getField Value < File OutputStream >(" out ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertFalse ( output . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write Text And Close ( content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( output . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( content , Ġfile . reader (). read Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . writer (). let Ġ{ Ġwriter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġwriter . getField Value < Any >(" se ") !!. getField Value < File OutputStream >(" out ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertFalse ( output . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write Text And Close ( content , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( output . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( content . slice ( 2 .. 4 ), Ġfile . reader (). read Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . writer (). let Ġ{ Ġwriter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġwriter . getField Value < Any >(" se ") !!. getField Value < File OutputStream >(" out ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertFalse ( output . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write Char And Close (' x '. toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( output . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" x ", Ġfile . reader (). read Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . writer (). let Ġ{ Ġwriter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġwriter . getField Value < Any >(" se ") !!. getField Value < File OutputStream >(" out ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertFalse ( output . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write Chars And Close ( content Chars ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( output . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( content Chars , Ġfile . reader (). read Text (). toCharArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . writer (). let Ġ{ Ġwriter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġwriter . getField Value < Any >(" se ") !!. getField Value < File OutputStream >(" out ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertFalse ( output . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write Chars And Close ( content Chars , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( output . getField Value (" closed ") Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( content Chars . slice Array ( 2 .. 4 ), Ġfile . reader (). read Text (). toCharArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . delete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest CopyTo () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠinputStream Ġ= Ġ" 1 2 3 4 5 6 7 8 9 0 ". byte InputStream () ĊĠĠĠĠĠĠĠ Ġvar ĠoutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . copy To ( output Stream , Ġ 1 0 2 4 Ġ* Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . close Quiet ly () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . close Quiet ly () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠinputStream Ġ= Ġ" 1 2 3 4 5 6 7 8 9 0 ". byte InputStream () ĊĠĠĠĠĠĠĠ ĠoutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . copy To ( output Stream , Ġobject Ġ: ĠCopy Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonUpdate Progress ( completed Length : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Canceled (): ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . close Quiet ly () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . close Quiet ly () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠinputStream Ġ= Ġ" 1 2 3 4 5 6 7 8 9 0 ". byte InputStream () ĊĠĠĠĠĠĠĠ ĠoutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . reader (). copy To ( output Stream . writer (), Ġ 1 0 2 4 Ġ* Ġ 4 , Ġobject Ġ: ĠCopy Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonUpdate Progress ( completed Length : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Canceled (): ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . close Quiet ly () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . close Quiet ly () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠinputStream Ġ= Ġ" 1 2 3 4 5 6 7 8 9 0 ". byte InputStream () ĊĠĠĠĠĠĠĠ ĠoutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . reader (). copy To ( output Stream . writer (), Ġobject Ġ: ĠCopy Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonUpdate Progress ( completed Length : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Canceled (): ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . close Quiet ly () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . close Quiet ly () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }