A Scala function to list subdirectories in a directory

If you ever need to generate a list of subdirectories in a directory in Scala, here’s one way to do it:

def getListOfSubDirectories(directoryName: String): Array[String] = {
    (new File(directoryName))
        .listFiles
        .filter(_.isDirectory)
        .map(_.getName)
}

I intentionally wrote that function in a short, “Scala like” style, but you can expand it to multiple lines by using intermediate variables, if you prefer.

To demonstrate the use of this directory-listing function, you can print all your subdirectories like this:

def main(args: Array[String]) {
    getListOfSubDirectories("/Users/Al").foreach(println)
}

How to get a list of subdirectories, the Java way

As a contrast, here’s how you’d get a list of subdirectories in Scala if you were programming in a “Java style”:

/**
 * Get a List[String] representing all the sub-directories in the given directory.
 */
def getListOfSubDirectoriesJavaStyle(directoryName: String): List[String] = {
    val directory = new File(directoryName)
    val files = directory.listFiles  // this is File[]
    val dirNames = ArrayBuffer[String]()
    for (file <- files) {
        if (file.isDirectory()) {
            dirNames += file.getName()
        }
    }
    return dirNames.toList
}

As you can see, there’s a pretty stark contrast in the two versions of the code. If the Scala code is a little too cryptic for you, it doesn’t have to be that short, but I’m comfortable with this style now, so it’s okay for me. It also helps to demonstrate a few differences between a functional style of programming and an imperative style.