001import java.io.File; 002import java.util.*; 003 004public class CompareJavaFiles { 005 static class FileInfo { 006 final File file; 007 final long size; 008 009 FileInfo(File file) { 010 this.file = file; 011 this.size = file.length(); 012 } 013 014 @Override 015 public String toString() { 016 return String.format("%s (size: %d bytes)", file.getAbsolutePath(), size); 017 } 018 } 019 020 public static void main(String[] args) { 021 String demoPath = "C:\\prg\\gsp_java\\gsp_demo_java\\src\\test\\java\\gudusoft"; 022 String corePath = "C:\\prg\\gsp_java\\gsp_java_core\\src\\test\\java\\gudusoft\\gsqlparser"; 023 024 Map<String, FileInfo> demoFiles = getJavaFiles(new File(demoPath)); 025 Map<String, FileInfo> coreFiles = getJavaFiles(new File(corePath)); 026 027 System.out.println("Files with same name and size in both directories:"); 028 System.out.println("------------------------------------------------"); 029 030 Set<String> commonFiles = new HashSet<>(demoFiles.keySet()); 031 commonFiles.retainAll(coreFiles.keySet()); 032 033 List<FileInfo> filesToDelete = new ArrayList<>(); 034 035 if (commonFiles.isEmpty()) { 036 System.out.println("No matching files found."); 037 } else { 038 List<String> sortedCommonFiles = new ArrayList<>(commonFiles); 039 Collections.sort(sortedCommonFiles); 040 041 int matchCount = 0; 042 for (String fileName : sortedCommonFiles) { 043 FileInfo demoFile = demoFiles.get(fileName); 044 FileInfo coreFile = coreFiles.get(fileName); 045 046 if (demoFile.size == coreFile.size) { 047 matchCount++; 048 System.out.println(fileName); 049 System.out.println(" Demo: " + demoFile); 050 System.out.println(" Core: " + coreFile); 051 System.out.println(); 052 filesToDelete.add(demoFile); 053 } 054 } 055 056 System.out.println("Total matching files found: " + matchCount); 057 058 if (matchCount > 0) { 059 System.out.println("\nDo you want to delete these files from the demo directory? (yes/no):"); 060 Scanner scanner = new Scanner(System.in); 061 String answer = scanner.nextLine().trim().toLowerCase(); 062 063 if (answer.equals("yes")) { 064 int deletedCount = 0; 065 for (FileInfo fileInfo : filesToDelete) { 066 if (fileInfo.file.delete()) { 067 deletedCount++; 068 System.out.println("Deleted: " + fileInfo.file.getAbsolutePath()); 069 } else { 070 System.out.println("Failed to delete: " + fileInfo.file.getAbsolutePath()); 071 } 072 } 073 System.out.println("\nDeleted " + deletedCount + " files."); 074 } else { 075 System.out.println("No files were deleted."); 076 } 077 scanner.close(); 078 } 079 } 080 081 System.out.println("\nStatistics:"); 082 System.out.println("-----------"); 083 System.out.println("Total java files in demo: " + demoFiles.size()); 084 System.out.println("Total java files in core: " + coreFiles.size()); 085 } 086 087 private static Map<String, FileInfo> getJavaFiles(File dir) { 088 Map<String, FileInfo> files = new HashMap<>(); 089 if (!dir.exists() || !dir.isDirectory()) { 090 System.out.println("Directory does not exist: " + dir.getAbsolutePath()); 091 return files; 092 } 093 getJavaFilesRecursive(dir, files); 094 return files; 095 } 096 097 private static void getJavaFilesRecursive(File dir, Map<String, FileInfo> files) { 098 File[] fileList = dir.listFiles(); 099 if (fileList != null) { 100 for (File file : fileList) { 101 if (file.isDirectory()) { 102 getJavaFilesRecursive(file, files); 103 } else if (file.getName().endsWith(".java")) { 104 files.put(file.getName(), new FileInfo(file)); 105 } 106 } 107 } 108 } 109}