создать список строк из имен файлов в указанном каталоге - PullRequest
1 голос
/ 26 июня 2019

наверное мой вопрос довольно очевиден.Хотелось бы взглянуть на один каталог и создать список строк, где каждая строка представляет имя файла, хранящееся в заданной директории, например, List ("file1.csv", "file2.csv", "file3.csv").

Я использую функцию, которая создает список, но это список файлов (не строк) и включает в себя полные пути (не только имена файлов).

import java.io.File

def getFileNames(path: String): List[File] = {
  val d = new File(path)
  if (d.exists && d.isDirectory) {
    d
      .listFiles // create list of File
      .filter(_.isFile)
      .toList
      .sortBy(_.getAbsolutePath().replaceAll("[^a-zA-Z0-9]",""))
  } else {
    Nil // return empty list
  }
}

Спасибо за все идеи.

Ответы [ 2 ]

2 голосов
/ 26 июня 2019

Попробуйте изменить тип возвращаемого значения getFileNames на List[String] и используйте map(_.getName) примерно так

def getFileNames(path: String): List[String] = {
    val d = new File(path)
    if (d.exists && d.isDirectory) {
      d
        .listFiles // create list of File
        .filter(_.isFile)
        .toList
        .sortBy(_.getAbsolutePath().replaceAll("[^a-zA-Z0-9]",""))
        .map(_.getName)
    } else {
      Nil // return empty list
    }
  }

Убедитесь, что .map(_.getName) является последним в цепочке, то есть после sortBy.

лучше-файлы упростит это до

import better.files._
import better.files.Dsl._
val file = file"."
ls(file).toList.filter(_.isRegularFile).map(_.name)
1 голос
/ 26 июня 2019

вы можете использовать метод getName

, и, как указал Томаш, фильтр и карта могут быть объединены, чтобы собрать как показано ниже

def getFileNames(path: String): List[String] = {
  val d = new File(path)
  if (d.exists && d.isDirectory) {
    d
      .listFiles // create list of File
      .collect{ case f if f.isFile => f.getName }// gets the name of the file  <--
      .toList
      .sortBy(_.getAbsolutePath().replaceAll("[^a-zA-Z0-9]",""))
  } else {
    Nil // return empty list
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...