Scala: write string to file in one statement

Viewed 138787

For reading files in Scala, there is

Source.fromFile("file.txt").mkString

Is there an equivalent and concise way to write a string to file?

Most languages support something like that. My favorite is Groovy:

def f = new File("file.txt")
// Read
def s = f.text
// Write
f.text = "file contents"

I'd like to use the code for programs ranging from a single line to a short page of code. Having to use your own library doesn't make sense here. I expect a modern language to let me write something to a file conveniently.

There are posts similar to this, but they don't answer my exact question or are focused on older Scala versions.

For example:

17 Answers

Use ammonite ops library. The syntax is very minimal, but the breadth of the library is almost as wide as what one would expect from attempting such a task in a shell scripting language like bash.

On the page I linked to, it shows numerous operations one can do with the library, but to answer this question, this is an example of writing to a file

import ammonite.ops._
write(pwd/"file.txt", "file contents")

Here's the modern, safe one liner:

java.nio.file.Files.write(java.nio.file.Paths.get("/tmp/output.txt"), "Hello world".getBytes());

nio is a modern IO library shipped by default with the JDK 9+ so no imports or dependencies required.

os-lib is the best modern way to write to a file, as mentioned here.

Here's how to write "hello" to the file.txt file.

os.write(os.pwd/"file.txt", "hello")

os-lib hides the Java ugliness and complexity (it uses the Java libs under the hood, so it's just as performant). See here for more info about using the lib.

import java.nio.file.{Files, Paths}

Files.writeString(
   Paths.get(theFilePathString),
   thePayloadString
)

(UTF-8 implicitly)

since Java 11

Related