Streams are used to transfer data between a program and source/destination. They transfer data independently of the source/destination. Streams are classified as input or output streams depending on the direction of data transfer, and as byte or character streams depending on how the data is carried. Common stream classes in Java include FileInputStream, FileOutputStream, FileReader, and FileWriter for reading from and writing to files. Exceptions like FileNotFoundException may occur if a file cannot be opened.