Building a disk usage utility
Your task is to implement a simple command-line utility that recursively scans a directory and all its sub-directories and reports the total number of bytes needed for every entry [like a very simplified variant of the Unix du utility]. Entries come in 3 different types: plain files: use their file size directories: sum the size of all entries (recursing on sub-directories) links/aliases: ignore Your solution should accept two optional command line arguments: -s only summarize, i.e. do not list everything, only top-level items PATHNAME the directory to start with, if not supplied use the current working directory: System.getProperty("user.dir"); Therefore, assuming the name of your class is DiskUsage, the synopsis for your program is: java DiskUsage [-s] [file|pathName] The output should list all items sorted by size and flagged as either FILE or DIR. Here are a few sample runs: java DiskUsage /Users/bernhard/cc2/ 14 FILE /Users/bernhard/cc2/cmc/ParseIt.java~ 26 FILE /Users/bernhard/cc2/cmc/antiPatterns~ 56 FILE /Users/bernhard/cc2/META-INF/MANIFEST.MF 56 DIR /Users/bernhard/cc2/META-INF 56 FILE /Users/bernhard/cc2/sss/x 62 FILE /Users/bernhard/cc2/AUTHORS 129 FILE /Users/bernhard/cc2/weka/classifiers/bayes/README ... 14719826 DIR /Users/bernhard/cc2/net 35382548 FILE /Users/bernhard/cc2/sss/rcv1-v2.topics.qrels 60806800 DIR /Users/bernhard/cc2/sss 85712886 DIR /Users/bernhard/cc2 [current directory is /Users/bernhard/cc2/, which has a sub-dir called test] java DiskUsage test 988 FILE /Users/bernhard/cc2/test/Files$Item.class 2589 FILE /Users/bernhard/cc2/test/Files.class 2993 FILE /Users/bernhard/cc2/test/Files.java~ 3024 FILE /Users/bernhard/cc2/test/Files.java 9594 DIR /Users/bernhard/cc2/test [current directory is /Users/bernhard/, which has a sub-dir called cc2] java DiskUsage -s cc2 56 DIR /Users/bernhard/cc2/META-INF 62 FILE /Users/bernhard/cc2/AUTHORS 265 FILE /Users/bernhard/cc2/THANKS 991 FILE /Users/bernhard/cc2/NEWS 1280 FILE /Users/bernhard/cc2/TODO 3735 FILE /Users/bernhard/cc2/README 6148 FILE /Users/bernhard/cc2/.DS_Store 9808 DIR /Users/bernhard/cc2/test 17989 FILE /Users/bernhard/cc2/COPYING 18718 DIR /Users/bernhard/cc2/gnu 64713 FILE /Users/bernhard/cc2/n.tgz 64890 FILE /Users/bernhard/cc2/sources.zip 78023 DIR /Users/bernhard/cc2/doc 104177 DIR /Users/bernhard/cc2/txt 140870 DIR /Users/bernhard/cc2/ATTIC 176486 DIR /Users/bernhard/cc2/nci 251841 DIR /Users/bernhard/cc2/hill 530491 FILE /Users/bernhard/cc2/jode-1.1.2-pre1.jar 858041 DIR /Users/bernhard/cc2/rcv12 904127 DIR /Users/bernhard/cc2/jode 1626715 DIR /Users/bernhard/cc2/cmc 5330796 DIR /Users/bernhard/cc2/weka 14719826 DIR /Users/bernhard/cc2/net 60806800 DIR /Users/bernhard/cc2/sss 85716848 DIR /Users/bernhard/cc2
Here are a few hints: