I know a little about it, was just curious to know more.
FileInputStream reads in raw bytes from a file, as opposed to the CharacterStreams FileReader which reads in streams of character.
RandomAccessFile supports both reading and writing, also provides a file pointer using which one can jump into any point in the file.
Scanner can be used to read in any input, even a file. It parses the input into tokens.
So which to use when?
Is Scanner limited to only text files and the other two can be used to read any file?
Scanner and FileReader are limited to text.
FileInputStream and RandomAccessFile are limited to binary (or ASCII text files)