import java.io.*; public class HuffmanTester { protected BufferedReader fileReader; protected PrintWriter fileWriter; protected Huffman huffman; protected String inFilePath; /** * Initializes this HuffmanTester object. * */ public HuffmanTester() { huffman = new Huffman(); } // default constructor /** * Reads in file paths and opens the input and output files. * * @return (a reference to) the file writer. * */ public PrintWriter openFiles() { final String IN_FILE_PROMPT = "\nPlease enter the path for the input file: "; final String OUT_FILE_PROMPT = "\nPlease enter the path for the output file: "; BufferedReader keyboardReader = new BufferedReader (new InputStreamReader (System.in)); String outFilePath, line; boolean pathsOK = false; while (!pathsOK) { try { System.out.print (IN_FILE_PROMPT); inFilePath = keyboardReader.readLine(); fileReader= new BufferedReader(new FileReader (inFilePath)); System.out.print (OUT_FILE_PROMPT); outFilePath = keyboardReader.readLine(); fileWriter = new PrintWriter (new FileWriter (outFilePath)); pathsOK = true; } // try catch (IOException e) { System.out.println (e); } // catch } // while !pathOK return fileWriter; } // method openFiles /** * Creates the Huffman encoding. * The worstTime(n) is O(n). * */ public void createEncoding() { String line; try { while (true) { line = fileReader.readLine(); if (line == null) break; huffman.updateFrequencies (line); } // while fileReader.close(); // re-opened in saveEncodedMessage huffman.createPQ(); huffman.createHuffmanTree(); huffman.calculateHuffmanCodes(); } // try catch (IOException e) { System.out.println (e); } // catch IOException } // method createEncoding /** * Saves the Huffman codes and the encoded message to a file. * The worstTime(n) is O(n). * */ public void saveEncodedMessage() { String line; try { fileWriter.print (huffman.getCodes()); fileWriter.println ("**"); // to separate codes from encoded message fileReader = new BufferedReader (new FileReader (inFilePath)); while (true) { line = fileReader.readLine(); if (line == null) break; fileWriter.println (huffman.getEncodedLine (line)); } // while } // try catch (IOException e) { System.out.println (e); } // catch IOException } // method saveEncodedMessage } // class HuffmanTester