The use and meaning of local variables in FileReader readline and readLineBackwards are not consistent. Especially, the character position at which the reader sits after one while loop in readLineBackwards is another then it is in readLine. That makes it difficult to use the class without knowledge about the inner semantics.
Further, readLineBackwards can be simplified by getting rid of the redundant if-clauses used before and within the while loop. That needs some brain power of course :-}