【问题标题】:How do i read and write to the same file in scala?我如何在scala中读取和写入同一个文件?
【发布时间】:2015-12-24 10:38:16
【问题描述】:

所以我试图在 scala 中读取一个文本文件,并且每当我看到某个符号时,我想在文本文件中的某个点向文本文件中写入一些内容。

例如,我正在读取一个文件,其中包含:

大家好,我叫“”,这是一个文本文件。

所以在读取文件时,当我看到符号“”时,我想给它写点东西;我将如何在 scala 中进行此操作?

【问题讨论】:

  • 它不会那么容易工作。当文件加载到内存时,其内容的组成字节位于连续的内存单元中(不是真的,但足够接近)。当您在撇号中写入新内容时,您会覆盖下一个字节。因此,如果您以天真的方式这样做并写“Alan”,那么您最终会得到Hi my name is "Alannd this is a text file.您应该将文件读入缓冲区,对其进行操作,然后覆盖该文件。顺便说一句,因为你,我五年前第一次使用了插入键。该死的东西仍然有效!
  • 我建议您从一个文件中读取(您可以在 Scala 中使用返回迭代器的 Source.fromFile(...).getLines 懒惰地进行读取)并写入另一个文件
  • 你可以读取每一行处理它并写入其他文件,然后删除旧文件,并重命名新文件吗?
  • 1.为什么要丢弃输入文件? 2. 为什么你不能在写文件的时候直接替换"" => something? 3.您是否计划进行任何其他替代?看起来您正在寻找一个小型模板引擎。
  • 我的最终目标确实是创建一个混淆器,所以我将替换文件中的变量,但也添加了,所以我只是想在 scala 中获得最好的方法,因为我新手

标签: scala io scala-collections scala-2.10 read-write


【解决方案1】:

如果问题仍然相关:您可能对 Java 的 FileChannel 感兴趣,它允许您读取和写入文件中的任意字节偏移量。

Oracle 甚至提供了一个示例 here,在 scala 中归结为:

val fc = FileChannel.open(filePath, StandardOpenOption.READ, StandardOpenOption.WRITE)

fc.read(destinationBuffer, position) // read bytes from the specified position
fc.write(sourceBuffer, position)     // write bytes to a specified position 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多