Hola:
Fíjate en este bucle
Código Java:
Ver originalwhile ((str = in.readLine()) != null) {
str = in.readLine().toString();
// str is one line of text; readLine() strips the newline character(s)
}
estas leyendo todas las líneas del fichero, sin hacer nada con ellas, hasta que lees un null y cuando str finalmente es null, entonces continuas fuera del bucle.
Cuando llegas a w.write(str), estás intentando escribir un null y te salta la excepción que estás mostrando.
Se bueno.