static public void cleanCache ( long maxBytes , Comparator < File > fileComparator , StringBuilder sbuff ) { if ( sbuff != null ) sbuff . append ( "DiskCache clean maxBytes= " ) . append ( maxBytes ) . append ( "on dir " ) . append ( root ) . append ( "\n" ) ; File dir = new File ( root ) ; long total = 0 , total_delete = 0 ; File [ ] files = dir . listFiles ( ) ; if ( files != null ) { List < File > fileList = Arrays . asList ( files ) ; Collections . sort ( fileList , fileComparator ) ; for ( File file : fileList ) { if ( file . length ( ) + total > maxBytes ) { total_delete += file . length ( ) ; if ( sbuff != null ) sbuff . append ( " delete " ) . append ( file ) . append ( " (" ) . append ( file . length ( ) ) . append ( ")\n" ) ; if ( ! file . delete ( ) && sbuff != null ) sbuff . append ( "Error deleting " ) . append ( file ) . append ( "\n" ) ; } else { total += file . length ( ) ; } } } if ( sbuff != null ) { sbuff . append ( "Total bytes deleted= " ) . append ( total_delete ) . append ( "\n" ) ; sbuff . append ( "Total bytes left in cache= " ) . append ( total ) . append ( "\n" ) ; } }
Remove files if needed to make cache have less than maxBytes bytes file sizes . This will remove files in sort order defined by fileComparator . The first files in the sort order are kept until the max bytes is exceeded then they are deleted .