读取文件内容并创建文件名和内容的Map

时间:2017-11-14 12:14:26

标签: scala

我想从给定目录中读取文件,然后从文件中读取内容,并创建filename作为键的映射,并将其作为值的上下文。

我没有取得任何成功,但我尝试过这样,

   def getFileLists(): List[File] = {
      val directory = "./input"
    //  print(new File(directory).listFiles().toList)
      return new File(directory).listFiles().toList
    }

    val contents = getFileLists().map(file => Source.fromFile(file).getLines())
    print(contents)

3 个答案:

答案 0 :(得分:0)

你可以试试这个:

getFileLists().map(file => (file.getName, Source.fromFile(file).getLines().toList)).toMap

答案 1 :(得分:0)

您正在做的是将文件名列表转换为其内容列表。你想要一个Map[File, List[String]]。为此,最简单的方法是map到文件和内容元组,然后在结果上调用toMap

getFileLists().map(file => file -> Source.fromFile(file).getLines().toList).toMap
输入序列以toMap作为元素类型时,

Tuple2有效。 file -> contents是一个元组(File, List[String])

或分两步:

val xs: Seq[(File, List[String])] = getFileLists().map(file =>
  file -> Source.fromFile(file).getLines().toList)
val m: Map[File, List[String]] = xs.toMap

答案 2 :(得分:0)

您可以更改以下行

val contents = getFileLists().map(file => Source.fromFile(file).getLines())

val contents = getFileLists().map(file => (file.getName, Source.fromFile(file).getLines()))

会给你

contents: List[(String, Iterator[String])] 

此外,您可以将.toMap方法调用添加为

val contents = getFileLists().map(file => (file.getName, Source.fromFile(file).getLines())).toMap

会给你

contents: scala.collection.immutable.Map[String,Iterator[String]]