The best solution, as usual, depends on your task: either you work with text or with binary data. In the first case you should prefer writers, in the second - streams.
You ask for comparison of approaches to write TEXT into files.
The last case in your question is the best one for writing/creation new text files. It is suitable for 99% of practical tasks.
PrintWritter pw = new PrintWriter("example.html", "UTF-8");
pw.write("Something");
It is short and readable. It supports explicit encoding and buffering. It does not require unnecessary wrappers.
Other old-fashion approaches can and should be used in those cases, where this solution is not applicable. E.g. you want to append any text to file. In this case you have no choice except to use writers based on stream wrappers (unfortunately, FileWriter doesn't support explicit encoding).