package Ġcom . t fc . ul ht . download Ċ Ċ import Ġcom . google . common . net . HttpHeaders . CONTENT _ LENGTH Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ Ċ import Ġjava . io . IOException Ċ import Ġjava . util .* ĊĊ Ċ class ĠFile Downloader ( private Ġval Ġclient : ĠOk HttpClient , Ġwriter : ĠFile Writer ) Ġ: ĠAuto Closeable Ġ{ ĊĠĠĠ Ġprivate Ġval Ġwriter : ĠFile Writer ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġdownload ( url : ĠString ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . new Call ( request ). execute () ĊĠĠĠĠĠĠĠ Ġval Ġresponse Body Ġ= Ġresponse . body () Ġ?: Ġthrow ĠIllegalStateException (" Response Ġdoesn 't Ġcontain Ġa Ġfile ") ĊĠĠĠĠĠĠĠ Ġval Ġlength Ġ= ĠObjects . requireNonNull ( response . header ( CONTENT _ LENGTH , Ġ" 1 ")) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toDouble () ĊĠĠĠĠĠĠĠ Ġreturn Ġwriter . write ( response Body . byte Stream (), Ġlength ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġwriter . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . writer Ġ= Ġwriter ĊĠĠĠ Ġ} Ċ }