• New options for creating paths to reduce verbosity. Now: Path("a/b/c",'/') will create a path by splitting the string with the separator and using the resulting parts as path segments. I recommend looking at the new documentation of Path and Filesystem.
  • Performance improvement for moving files when renameTo fails (for example between fileSystems). New performance can be thousands of times faster.
  • Added sibling convenience method to Path allowing Path("a").sibling("b") to create Path("b")
  • New API for processing Input objects.
  • Options to create Resources that don't close underlying resource. For example if Standard In is to be processed, the stream should not be closed. System.in.asUnmanagedInput will created an Input object from System.in. See the examples for several examples of doing this.
  • Added an Async API for Processors
  • Added an experimental Async API for LongTraversable
  • Added a context object for each resource which allows configuration of the resource's parameters. Currently there are only a couple of parameters that are common to all connections.
    • An error handler which allows custom handling of exceptions raised while accessing a resource. Default behaviour is to throw a ScalaIOException which contains the list of exceptions that were raised during the operation and while closing.
    • CloseActions have been moved to the context object
    • Methods for controlling the size of the character and byte buffers
    • An optional descriptive name for each resource for debugging
  • Replaced openOutput, openSeekable, etc... with processors so read write is uniform

    The required change is essentially as follows:

    • Before:
      output.openOutput{out =>
          out.write(3)
          out.write("hi")
      }
    • Now:
      for {
          outp <- output.outputProcessor
          out = outp.asOutput
      } {
          out.write(3)
          out.write(4)
      }
      Or: Since out's write operations return Processors they can be interleaved within the for comprehension if needed like:
      for {
          out <- output.outputProcessor
          _ <- out.write(3)
          _ <- out.write(4)
      } ()