Untitled
unknown
plain_text
2 months ago
4.7 kB
3
Indexable
package org.example; import java.io.File; import java.util.HashMap; import java.util.Map; public class FolderComparison { public static void main(String[] args) { String folderAPath = "C:\\Users\\przem\\OneDrive\\Pulpit\\A"; String folderBPath = "C:\\Users\\przem\\OneDrive\\Pulpit\\B"; Map<String, FolderStats> folderAStats = analyzeFolder(new File(folderAPath)); Map<String, FolderStats> folderBStats = analyzeFolder(new File(folderBPath)); System.out.println("Folder A Analysis:"); printFolderStats(folderAStats); System.out.println("Folder B Analysis:"); printFolderStats(folderBStats); System.out.println("Comparison:"); compareFolders(folderAStats, folderBStats); } private static Map<String, FolderStats> analyzeFolder(File folder) { Map<String, FolderStats> stats = new HashMap<>(); if (folder.exists() && folder.isDirectory()) { analyzeFolderRecursive(folder, stats); } return stats; } private static void analyzeFolderRecursive(File folder, Map<String, FolderStats> stats) { File[] files = folder.listFiles(); if (files != null) { for (File file : files) { if (file.isDirectory()) { analyzeFolderRecursive(file, stats); } else { String folderPath = folder.getAbsolutePath(); FolderStats folderStats = stats.getOrDefault(folderPath, new FolderStats()); folderStats.incrementFileCount(); String extension = getFileExtension(file); folderStats.incrementExtensionCount(extension); stats.put(folderPath, folderStats); } } } } private static String getFileExtension(File file) { String name = file.getName(); int lastIndex = name.lastIndexOf('.'); return (lastIndex == -1) ? "" : name.substring(lastIndex + 1).toLowerCase(); } private static void printFolderStats(Map<String, FolderStats> stats) { stats.forEach((path, folderStats) -> { System.out.println("Folder: " + path); System.out.println(" File Count: " + folderStats.getFileCount()); System.out.println(" Extensions: " + folderStats.getExtensionsCount()); }); } private static void compareFolders(Map<String, FolderStats> folderAStats, Map<String, FolderStats> folderBStats) { folderAStats.forEach((path, statsA) -> { FolderStats statsB = folderBStats.get(path); if (statsB == null) { System.out.println("Folder in A not in B: " + path); } else { System.out.println("Comparing folder: " + path); if (statsA.getFileCount() == statsB.getFileCount()) { System.out.println(" File counts match: " + statsA.getFileCount()); } else { System.out.println(" File count mismatch: A = " + statsA.getFileCount() + ", B = " + statsB.getFileCount()); } statsA.getExtensionsCount().forEach((ext, countA) -> { int countB = statsB.getExtensionsCount().getOrDefault(ext, 0); if (countA == countB) { System.out.println(" Extension match: " + ext + " = " + countA); } else { System.out.println(" Extension mismatch for " + ext + ": A = " + countA + ", B = " + countB); } }); } }); folderBStats.keySet().stream() .filter(path -> !folderAStats.containsKey(path)) .forEach(path -> System.out.println("Folder in B not in A: " + path)); } static class FolderStats { private int fileCount; private Map<String, Integer> extensionsCount; public FolderStats() { this.fileCount = 0; this.extensionsCount = new HashMap<>(); } public void incrementFileCount() { this.fileCount++; } public void incrementExtensionCount(String extension) { this.extensionsCount.put(extension, this.extensionsCount.getOrDefault(extension, 0) + 1); } public int getFileCount() { return fileCount; } public Map<String, Integer> getExtensionsCount() { return extensionsCount; } } }
Editor is loading...
Leave a Comment