如何使用Scala读取和更改文件中行的位置

我有一个文件,可以说file1:

A
B
C
D
E

我必须阅读此文件,并想将文件的第一行和第二行移至文件中的第三行和第四行,例如:

C
D
A
B
E

Getlines函数可以获取行并可能打印出来。但是如何使用Scala更改文件中线条的位置?

dzhw123 回答:如何使用Scala读取和更改文件中行的位置

让我们说您不能或者只是不想将整个文件读入内存。或者,另一方面,如果文件少于4行怎么办?交换仍然可以安全地完成吗?

import java.nio.file.{Files,Paths}

util.Using.Manager { use =>  //Scala 2.13
  val input  = use(io.Source.fromFile("inFile.txt"))
  val output = use(Files.newBufferedWriter(Paths.get("outFile.txt")))

  val itr = input.getLines()
  val linesAB = Seq.fill(2)(util.Try(itr.next()))
  val linesCD = Seq.fill(2)(util.Try(itr.next()))
  linesCD.foreach(_.foreach(s => output.write(s + "\n")))
  linesAB.foreach(_.foreach(s => output.write(s + "\n")))
  while (itr.hasNext) output.write(itr.next() + "\n")

}.fold(println,identity)  //report failure

结果:

~> head *File.txt  # a 3-line file
==> inFile.txt <==
A
B
C

==> outFile.txt <==
C
A
B
,

这是一个务实的解决方案:

  val newList =Source.fromFile("file.txt").getLines().toList match {
    case a::b::c::d::rest => c::d::a::b::rest // reorganize your list
    case other => other // don't do anything if the List has not at least 4 elements
  }
  // persist newList

使用List类型的模式匹配

本文链接:https://www.f2er.com/3160129.html

大家都在问