我有一个文件,可以说file1:
A
B
C
D
E
我必须阅读此文件,并想将文件的第一行和第二行移至文件中的第三行和第四行,例如:
C
D
A
B
E
Getlines函数可以获取行并可能打印出来。但是如何使用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
类型的模式匹配。