我想从给定目录中读取文件,然后从文件中读取内容,并创建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)
答案 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]]