How to list files in a directory in Scala (and filter the list)

This is an excerpt from the Scala Cookbook (partially modified for the internet). This is Recipe 12.9, “How to list files in a directory in Scala (and filtering them).”


Using Scala, you want to get a list of files that are in a directory, potentially limiting the list of files with a filtering algorithm.


Scala doesn’t offer any different methods for working with directories, so use the listFiles method of the Java File class. For instance, this method creates a list of all files in a directory:

def getListOfFiles(dir: String):List[File] = {
    val d = new File(dir)
    if (d.exists && d.isDirectory) {
    } else {

The REPL demonstrates how you can use this method:

scala> import

scala> val files = getListOfFiles("/tmp")
files: List[] = List(/tmp/foo.log, /tmp/Files.scala.swp)

Note that if you’re sure that the file you’re given is a directory and it exists, you can shorten this method to just the following code:

def getListOfFiles(dir: File):List[File] = dir.listFiles.filter(_.isFile).toList


If you want to limit the list of files that are returned based on their filename extension, in Java, you’d implement a FileFilter with an accept method to filter the filenames that are returned. In Scala, you can write the equivalent code without requiring a FileFilter. Assuming that the File you’re given represents a directory that is known to exist, the following method shows how to filter a set of files based on the filename extensions that should be returned:


def getListOfFiles(dir: File, extensions: List[String]): List[File] = {
    dir.listFiles.filter(_.isFile).toList.filter { file =>

You can call this method as follows to list all WAV and MP3 files in a given directory:

val okFileExtensions = List("wav", "mp3")
val files = getListOfFiles(new File("/tmp"), okFileExtensions)

As long as this method is given a directory that exists, this method will return an empty List if no matching files are found:

scala> val files = getListOfFiles(new File("/Users/Al"), okFileExtensions)
files: List[] = List()

This is nice, because you can use the result normally, without having to worry about a null value:

scala> files.foreach(println)
(no output or errors, because an empty List was returned)

See Also

The Scala Cookbook

This tutorial is sponsored by the Scala Cookbook, which I wrote for O’Reilly:

You can find the Scala Cookbook at these locations: