Closing a stream when it's no longer needed is very important, so use a finally block or try-with-resource to guarantee that streams will be closed even if an error occurs. This practice helps avoid serious resource leaks.(Oracle Doc)
If the file contains only the text data, it is recommended to use character streams instead of Byte Stream
Character streams are often "wrappers" for byte streams. The character stream uses the byte stream to perform the physical I/O, while the character stream handles translation between characters and bytes. FileReader, for example, uses FileInputStream, while FileWriter uses FileOutputStream. Oracle Doc
There are four buffered stream classes used to wrap unbuffered streams: BufferedInputStream and BufferedOutputStream create buffered byte streams, while BufferedReader and BufferedWriter create buffered character streams. link