important :find duplicate files whose size > 50mb worked with java progarma
//it worked.
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.*;
import java.text.DecimalFormat;
import java.util.*;
public class DuplicateFinder {
private static final List<String> EXCLUDED_PATHS = Arrays.asList(
"C:\\Windows",
"C:\\Program Files",
"C:\\Program Files (x86)",
"C:\\ProgramData",
"C:\\$Recycle.Bin",
"C:\\System Volume Information"
);
private static final long MIN_FILE_SIZE = 50 * 1024 * 1024; // 50MB in bytes
public static void main(String[] args) throws IOException {
Path rootPath = Paths.get("C:\\");
Map<String, List<Path>> duplicateFiles = new HashMap<>();
Files.walkFileTree(rootPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
for (String excluded : EXCLUDED_PATHS) {
if (dir.toString().startsWith(excluded)) {
return FileVisitResult.SKIP_SUBTREE;
}
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
try {
long size = attrs.size();
// Checking for files > 50MB
if (size > MIN_FILE_SIZE) {
Path fileName = file.getFileName();
if (fileName == null) {
return FileVisitResult.CONTINUE; // Skip if no file name
}
String fileKey = fileName.toString() + "::" + size;
duplicateFiles.computeIfAbsent(fileKey, k -> new ArrayList<>()).add(file);
}
} catch (Exception e) {
System.err.println("Error processing file " + file + ": " + e.getMessage());
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) {
System.err.println("Failed to access file " + file + ": " + exc.getMessage());
return FileVisitResult.CONTINUE;
}
});
DecimalFormat df = new DecimalFormat("#.##");
System.out.println("\n--- Duplicate Files (Same Name & Size, > 50MB) ---");
duplicateFiles.values().stream()
.filter(list -> list.size() > 1)
.forEach(list -> {
Path sample = list.get(0);
long size;
try {
size = Files.size(sample);
} catch (IOException e) {
System.err.println("Error reading size of " + sample + ": " + e.getMessage());
return;
}
System.out.println("File: " + sample.getFileName() + " (" + df.format(size / (1024.0 * 1024)) + " MB)");
list.forEach(p -> System.out.println(" " + p));
System.out.println();
});
}
}