f.length(); // gives us the length in bytes, the type of the result is 'long'
(int) f.length(); // casts the long to an int
char cbuff[] = new char [(int) f.length()]; // create a new variable, which is an array of char and is called cbuff. assign a new array of char to it, with the length specified by the length of the file
Here's the link showing that FileReader.read(char[]) reads from the file into an array. It's actually a method inherited from the Reader class.
fr.read(cbuff); //this is the line that does the actual reading from the file f. The results are stored in the char array cbuff (which is why we initialized it to be the length of the file)
Now, the result of fr.read() is stored in an int, that's just the number of characters that have been read. Unless there is an error, this should be the exact same as the length of cbuff.