Go very slowly on IO part. Do not try learn in one shot.... Make examples.. you will find very easy...
For reader part: 1) FileReader is lowerlevel reader, it can read a single char or a char. It depends on the InputStreamReader for its api. See these class in java source code, you will find it helpful. 2) After FileReader next comes BufferedReader. It only takes reader in constructor. The benefit over FileReader is that it has buffer to store read characters, so it can read a line. That's why it has readLint() method that reads whole characters in a line into a buffer then returns a String containg charaters of a line.
For writer part: it is like reader part but it has an extra class PrintWriter.
1) Just like FileReader, it is lower lever writer, it depends on OutputStreamWriter for its APIs. It can write a single char, char and String. And It can flush, as it is writer. No flush required in reading part.
2) Wrapper of FileWriter is BufferedWriter, it takes writer in the constructor. Only benefit over FileWriter is that it has newLine() method that writes a line separator.
3) PrintWriter, it has benefit that it can take writer, file, String filename and OutputStream in the constructor. But it has lots of method. like append(), write(), print(), printf(), println(), format(), checkError(), format() with Locale.
If you complete this much course, then you can handle all the questions easily.