Scala provides a few extensions to Java’s IO library.



print() and println(): the latter adds a newline to the end.

printf() supports C-style format string.


readLine() read a line of input. It can specify a prompt string.

readInt(), readDouble() etc can read a proper type value, but no prompt string can be supplied.



  • Open a file: use object: val source = Source.fromFile(filename, encoding). Filename can be a string or a Encoding can be omitted.
  • Read from other sources: use Source.fromURL(URL, encoding), Source.fromString(s), and Source.stdin to read from URL, String, and standard input.
  • Read lines: val lineIterator = source.getLines. The result is an iterator. It can be used to process line-by-line in a for loop, or convert to array/buffer using toArray/toBuffer.
  • Read whole file: source.mkString.
  • Read character: use source object directly. If you want to peek without moving the header, call val iter = source.buffered to get a buffered object.
  • Split by token: val tokens = source.mkString.split("\\s+") splits by whitespace.

Binary files: Scala has no specific way to read binary files. Use Java library instead.


To write a text filem use


Fall back to Java libraries.


@SerialVersionUID(0L) class Person extends Serializable. Then to send an object, use instance of ObjectOutputStream and call writeObject(obj) method. To receive an object, use instance of ObjectInputStream and call in.readObject().asInstanceOf[Class] to convert to the right type.

Scala collections are serializable.