// Calculates Entropy for a given file of characters. import java.lang.Exception; import java.io.IOException; import java.io.PrintStream; class Entropy{ public static void main (String args[]) throws java.lang.Exception { String infile; IO.Compressor io ; int i; char[] temparray; //char[] carray; int carrayLength, temparrayLength; int [] occurrences = new int[128]; float entropy = 0; try { infile = args[0]; /*infile is the name of the file to be compressed*/ /* Initialize a IO.Compressor object so that it is ready to * read the input file, and to write the output file to the disk */ io = new IO.Compressor(infile); /* Read all characters from the input file to a character array */ temparray = io.giveArray(); temparrayLength = temparray.length; // Strip 0(NULL) and 10(LF) from end of array while( (temparray[temparrayLength-1] == 0) || (temparray[temparrayLength-1] == 10) ) { temparrayLength--; } char [] carray = new char[temparrayLength]; for( i = 0; i < temparrayLength; i++) { carray[i] = temparray[i]; } carrayLength = carray.length; //System.out.println ("Length of String = " + carrayLength); for(i = 0; i< carrayLength; i++) { System.out.println (carray[i] + " = " + (int)carray[i]); occurrences[(int)carray[i]]++; } for(i = 0; i< occurrences.length; i++) // start at 1 to remove NULL(EOF) { if(occurrences[i] != 0) { float percent = (float)occurrences[i] / carrayLength; System.out.println ((char)i + "("+i+") = " + occurrences[i] + ", % = " + percent); entropy += percent * (Math.log(percent)/Math.log(2)); } } entropy = entropy * -1; System.out.println ("Entropy for the text file is " + entropy); /* Close all relevant files */ io.done(); } catch(ArrayIndexOutOfBoundsException aE) { System.out.println("Thrown to indicate that an array has been accessed with an illegal index." + aE.getMessage()); } }// end of main } // end class Entropy