Difference between Reader and InputStream classes
InputStreams are used to read bytes from a stream . It grabs the data byte by byte without performing any kind of translation. So they are useful for binary data such as images, video and serialized objects.
Readers on the other hand are character streams so they are best used to read character data. If the information you are reading is all text, then the Reader will take care of the character decoding for you and give you unicode characters from the raw input stream. If you are reading any type of text,
this is the stream to use.
Java File Class
Java's Input/Output (I/O) libraries are designed in an abstract way that enables you to read from external source of data sources and write to external targets, regardless of the kind of thing you’re writing to or reading from. When you work with files for I/O, you basically work with streams .
More about..... Java File Class