package Ġcom . be ust . k ob alt . maven Ċ Ċ import Ġcom . be ust . k ob alt . misc . K Files Ċ import Ġcom . be ust . k ob alt . misc . k ob alt Log Ċ import Ġjava . io . File Ċ import Ġjava . security . Message Digest Ċ import Ġjavax . xml . bind . Datatype Converter Ċ Ċ class ĠMd 5 Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġprivate Ġfun Ġmd 5 ( file : ĠFile ) Ġ: ĠString Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . isDirectory ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" PRO BLE M ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmd 5 Ġ= ĠMessage Digest . getInstance (" MD 5 ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġfile . read Bytes () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġmd 5 . update ( bytes , Ġ 0 , Ġbytes . size ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDat atype Converter . print Hex Binary ( md 5 . digest ()). toLowerCase () Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalculate Ġa Ġchecksum Ġfor Ġall Ġthe Ġfiles / directories . ĠThe Ġconversion Ġfrom ĠFile Ġto ĊĠĠĠĠĠĠĠĠ Ġ* Ġbytes Ġcan Ġbe Ġcustomized Ġby Ġthe Ġ@ param { to Bytes } Ġparameter . ĠThe Ġdefault Ġimplementation Ġcalculates ĊĠĠĠĠĠĠĠĠ Ġ* Ġa Ġchecksum Ġof Ġthe Ġlast Ġmodified Ġtimestamp . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġto Md 5 Directories ( files Or Directories : ĠList < File >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Bytes : Ġ( File ) Ġ-> ĠByteArray Ġ= Ġ{ Ġ"${ it . path } Ġ${ it . lastModified ()} Ġ${ it . length ()} ". toByteArray () Ġ} Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( files Or Directories . any ( File :: exists )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessage Digest . getInstance (" MD 5 "). let Ġ{ Ġmd 5 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfile Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiles Or Directories . filter ( File :: exists ). forEach Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . isFile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ob alt Log ( 3 , Ġ" ĠĠĠĠĠ ĠCalcul ating Ġchecksum Ġof Ġ$ file ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġto Bytes ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmd 5 . update ( bytes , Ġ 0 , Ġbytes . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfiles Ġ= ĠK Files . find Re cursively ( file ) Ġ// Ġ, Ġ{ Ġf Ġ-> Ġf . endsWith (" java ") }) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ob alt Log ( 3 , Ġ" ĠĠĠĠĠ ĠCalcul ating Ġchecksum Ġof Ġ${ files . size } Ġfiles Ġin Ġ$ file ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiles . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( file , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . isFile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġto Bytes ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmd 5 . update ( bytes , Ġ 0 , Ġbytes . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġoutput Ġdirectory Ġmight Ġexist Ġbut Ġwith Ġno Ġfiles Ġin Ġit , Ġin Ġwhich Ġcase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġmust Ġrun Ġthe Ġtask ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠDat atype Converter . print Hex Binary ( md 5 . digest ()). toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġto Md 5 ( file : ĠFile ) Ġ= ĠMessage Digest . getInstance (" MD 5 "). let Ġ{ Ġmd 5 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . forEach Block Ġ{ Ġbytes , Ġsize Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmd 5 . update ( bytes , Ġ 0 , Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDat atype Converter . print Hex Binary ( md 5 . digest ()). toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ