Mega Code Archive

 
Categories / Java / File Input Output
 

Counts words in a file, outputs results in sorted form

// : c12:WordCount.java // Counts words in a file, outputs results in sorted form. // {Args: WordCount.java} // From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002 // www.BruceEckel.com. See copyright notice in CopyRight.txt. import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.StreamTokenizer; import java.util.Collection; import java.util.Iterator; import java.util.Set; import java.util.TreeMap; class Counter {   private int i = 1;   public int read() {     return i;   }   public void increment() {     i++;   } } public class WordCount1 {   private static final String usage = "Usage: \nWordCount file\n"       + "Counts the words in the file and "       + "outputs results in sorted form.";   private FileReader file;   private StreamTokenizer st;   // A TreeMap keeps keys in sorted order:   private TreeMap counts = new TreeMap();   public WordCount1(String filename) throws FileNotFoundException {     try {       file = new FileReader(filename);       st = new StreamTokenizer(new BufferedReader(file));       st.ordinaryChar('.');       st.ordinaryChar('-');     } catch (FileNotFoundException e) {       throw new RuntimeException(e);     }   }   public void dispose() {     try {       file.close();     } catch (IOException e) {       throw new RuntimeException(e);     }   }   public void countWords() {     try {       while (st.nextToken() != StreamTokenizer.TT_EOF) {         String s;         switch (st.ttype) {         case StreamTokenizer.TT_EOL:           s = new String("EOL");           break;         case StreamTokenizer.TT_NUMBER:           s = Double.toString(st.nval);           break;         case StreamTokenizer.TT_WORD:           s = st.sval; // Already a String           break;         default: // single character in ttype           s = String.valueOf((char) st.ttype);         }         if (counts.containsKey(s))           ((Counter) counts.get(s)).increment();         else           counts.put(s, new Counter());       }     } catch (IOException e) {       throw new RuntimeException(e);     }   }   public Collection values() {     return counts.values();   }   public Set keySet() {     return counts.keySet();   }   public Counter getCounter(String s) {     return (Counter) counts.get(s);   }   public static void main(String[] args) throws FileNotFoundException {     if (args.length == 0) {       System.out.println(usage);       System.exit(1);     }     WordCount1 wc = new WordCount1(args[0]);     wc.countWords();     Iterator keys = wc.keySet().iterator();     while (keys.hasNext()) {       String key = (String) keys.next();       System.out.println(key + ": " + wc.getCounter(key).read());     }     wc.dispose();   } } ///:~