import java.io.File;
import javax.swing.JFileChooser;

public class FileSearch {
    public static void main(String[] args) {
        // Ask the user to select a directory.
        JFileChooser chooser = new JFileChooser();
        chooser.setDialogTitle("Select Directory to Search");
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int result = chooser.showDialog(null, "Select");
        if(result != JFileChooser.APPROVE_OPTION) { // Dialog canceled
            System.out.println("Search canceled; program complete");
            return;
        }

        // Initiate the recursive search on the selected file.
        File selected = chooser.getSelectedFile();
        System.out.println("Searching " + selected.toString() + "...");
        search(selected);
    }

    private static void search(File base) {
        File[] sub = base.listFiles();
        if(sub != null && sub.length > 0) {
            long total = base.length();
            for(int i = 0; i < sub.length; i++) {
                total += sub[i].length();
                search(sub[i]);
            }
            System.out.printf("%8dKB %s\n", (total + 1023) / 1024, base.getPath());
        }
    }
}
