2017-11-14 11 views
0

指定したディレクトリからファイルを読み込み、ファイルから内容を読み込み、ファイル名のマップをキーとして作成し、値としてのcontetnsを作成します。私は、任意の成功を持っていなかったが、私はこのように試してみましたが、ファイルの内容を読み込んでファイル名と内容のマップを作成する

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

あなたはこの試みることができます:

getFileLists().map(file => (file.getName, Source.fromFile(file).getLines().toList)).toMap 
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 
+0

を与えることになる

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

として感謝を.toMapメソッド呼び出しを追加することができますが、戻り値の型がマップ[ファイル、リスト[文字列]]このコードは作品で、あるべきしかし、これは私が望むものです;)。私はscalaを初めて使っています。今日、AnyからArrowAssocへの暗黙的な変換を学びました。もう一度ありがとうございます – learningJava8

+0

ああ、 'getLines'型をチェックしませんでした。私は今それを修正する。 –

0

あなたは

あなた

contents: List[(String, Iterator[String])] 
を与えるだろう
val contents = getFileLists().map(file => (file.getName, Source.fromFile(file).getLines())) 

にあなたの次の行

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

を変更することができます

さらにあなたはあなたの

contents: scala.collection.immutable.Map[String,Iterator[String]] 
関連する問題