After a run to the beer store if figured it out.
while(line.append(reader.readLine().toString()) != null){
You have to catch the NullPointerException.
That isn't doing what you think it is.
What it is actually doing is reading the next line from the buffer, calling the toString method on the returned
String object (which will be null when the end of file is reached and hence the NullPointerException). It then passes the String object to the StringBuffer's append method which returns a reference to itself (so you can chain appends) which you then check is not null - it will always be non null.
The big question is why do you think this is even saving memory overhead? A String object is being created by the call to readLine so why not just assign it to a String variable?
Also why are you using StringBuffer and not StringBuilder?