Scala: список файлов, которые соответствуют регулярному выражению в каталоге - PullRequest
1 голос
/ 11 октября 2019

Я пытаюсь перечислить файлы в каталоге, которые соответствуют регулярному выражению, например, ".csv $", это очень похоже на Scala & DataBricks: получение списка файлов

Я часами бегал кругами, пытаясь выяснить, как Scala может вывести список файлов и отфильтровать по регулярному выражению.

import java.io.File

def getListOfFiles(dir: String):List[File] = {
    val d = new File(dir)
    if (d.exists && d.isDirectory) {
        d.listFiles.filter(_.isFile).toList
    } else {
        List[File]()
    }
}
val name : String = ".csv"

val files = getListOfFiles("/home/con/Scripts").map(_.path).filter(_.matches(name))
println(files)

выдает ошибку

/home/con/Scripts/scala/find_files.scala:13: error: value path is not a member of java.io.File
val files = getListOfFiles("/home/con/Scripts").map(_.path).filter(_.matches(name))

I 'я пытаюсь выяснить обычный эквивалент Scala dbutils.fs.ls, который ускользает от меня.

Как можно перечислить файлы в обычном каталоге в Scala?

1 Ответ

2 голосов
/ 11 октября 2019

Ошибка сообщает, что путь не определен в java.io.File, который не является.

Если вы хотите сопоставить по имени, почему бы вам не получить имена файлов? Кроме того, ваше регулярное выражение немного отключено, если вы хотите сопоставить на основе расширения файла.

Исправление этих двух проблем:

val name : String = ".+\\.csv"
val files = getListOfFiles("/path/to/files/location")
  .map(f => f.getName)
  .filter(_.matches(name))

будет выводить .csv файлы впапка / path / to / files / location .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...