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}