```java title="DiskCache.java" import com.kreuzberg.*; import java.nio.file.Files; import java.nio.file.Paths; public final class DiskCache { private DiskCache() {} public static void main(String[] args) throws Exception { String cacheDir = System.getProperty("user.home") + "/.cache/kreuzberg"; Files.createDirectories(Paths.get(cacheDir)); CacheConfig cacheConfig = new CacheConfig( cacheDir, 500L * 1024 * 1024, 7L * 86400, true ); ExtractionConfig config = new ExtractionConfig.Builder() .useCache(true) .cacheConfig(cacheConfig) .build(); Kreuzberg kreuzberg = new Kreuzberg(config); System.out.println("First extraction (will be cached)..."); ExtractionResult result1 = kreuzberg.extractFile("document.pdf"); System.out.println(" - Content length: " + result1.content().length()); System.out.println(" - Cached: " + result1.metadata().wasCached()); System.out.println("\nSecond extraction (from cache)..."); ExtractionResult result2 = kreuzberg.extractFile("document.pdf"); System.out.println(" - Content length: " + result2.content().length()); System.out.println(" - Cached: " + result2.metadata().wasCached()); System.out.println("\nResults are identical: " + result1.content().equals(result2.content())); CacheStats cacheStats = kreuzberg.getCacheStats(); System.out.println("\nCache Statistics:"); System.out.println(" - Total entries: " + cacheStats.totalEntries()); System.out.println(" - Cache size: " + String.format("%.1f", cacheStats.cacheSizeBytes() / 1024.0 / 1024.0) + " MB"); System.out.println(" - Hit rate: " + String.format("%.1f", cacheStats.hitRate() * 100) + "%"); } } ```