如何删除scala中文件的最后一行?

如何删除scala中文件的最后一行?,scala,Scala,我试图附加到一个文件中,这样我首先要删除最后一行,然后开始附加。但是,我不知道如何删除文件的最后一行 我将文件追加如下: val fw = new FileWriter("src/file.txt", true) ; fw.write("new item"); 谁能帮帮我吗 编辑: 在遵循您的方法之后,我正尝试写回文件,但当我这样做时,所有内容(最后一行已删除)都以一行的形式出现,但我希望它们以单独的行出现。我的scala已经过时了,因此人们可能会给您一个更好的解决方案: import sca

我试图附加到一个文件中,这样我首先要删除最后一行,然后开始附加。但是,我不知道如何删除文件的最后一行

我将文件追加如下:

val fw = new FileWriter("src/file.txt", true) ;
fw.write("new item");
谁能帮帮我吗

编辑:


在遵循您的方法之后,我正尝试写回文件,但当我这样做时,所有内容(最后一行已删除)都以一行的形式出现,但我希望它们以单独的行出现。

我的scala已经过时了,因此人们可能会给您一个更好的解决方案:

import scala.io.Source
import java.io._

object Test00 {
  def main(args: Array[String]) = {

    val lines = Source.fromFile("src/file.txt").getLines().toList.dropRight(1)

    val pw = new PrintWriter(new File("src/out.txt" ))

    (lines :+ "another line").foreach(pw.println)

    pw.close()
  }
}

很抱歉硬编码的附加,我只是用它来测试一切是否正常。

返回随机访问文件,但不返回最后一行

import java.io.{RandomAccessFile,File}
def随机访问(文件:文件)={
val random=新的RANDOMACCESS文件(文件“rw”)
val结果=findLastLine(随机,0,0)
随机搜索(结果)
随机的
}
def findLastLine(随机:随机访问文件,位置:长,上一个:长):长={
val pointer=random.getFilePointer
if(random.readLine==null){
以前的
}否则{
findLastLine(随机、上一个、指针)
}
}
val文件=新文件(“build.sbt”)
val random=randomAccess(文件)
和测试:

  val line = random.readLine()
  logger.debug(s"$line")

对于非常大的文件,一个简单的解决方案依赖于OS相关的工具,例如“代码> SED(流编辑器),因此考虑这样的调用,

import sys.process._
Seq("sed","-i","$ d","src/file1.txt")!

这将删除文本文件的最后一行。这种方法的伸缩性不是很强,但它在不离开Scala的情况下解决了问题。

您不能只删除文件中的最后一行。您必须创建没有最后一行的新文件。或者使用FileChannel:我会将文本行加载到列表中,删除最后一项,然后开始追加。如果您的文件很小,则可以。但是如果是1GB或更大呢?嗯,是的,这取决于场景。@Marcs:你能看看问题中的编辑并告诉我如何继续吗?上面写着“未终止的替换模式”:我试着按照你的方式做,我喜欢这样:val lines\u list=Source.fromFile(“src/file.txt”).getLines().toList val new\u lines=lines\u list.dropRight(1)val pw=new PrintWriter(new file(“src/file.txt”)(t).foreach(pw.write)pw.write(“\n”)pw.close()但是,它给出了删除单行中最后一行后文件中的元素;如何在每行之间添加“\n”,然后将其写入文件?这一行使用pw。如果文本文件很大,则不是最好的。
import sys.process._
Seq("sed","-i","$ d","src/file1.txt")!