FileWriter is the character representation of IO. That means it can be used to write characters. Internally FileWriter would use the default character set of the underlying OS and convert the characters to bytes and write it to the disk.
PrintWriter & FileWriter.
a) Both extend from Writer.
b) Both are character representation classes, that means they work with characters and convert them to bytes using default charset.
a) FileWriter throws IOException in case of any IO failure, this is a checked exception.
b) None of the PrintWriter methods throws IOException , instead they set a boolean flag which can be obtained using checkError().
c) PrintWriter invokes flush after every byte of data is written , automatically. In case of FileWriter, invoker as to take care of invoking flush.
Difference between PrintStream and OutputStream: Similar to above explanation, just replace character with byte.
In case you guys know more difference , post it. Further please correct me whereever possible,