2015-09-26 38 views
2

因此,我試圖讀取scala中的文本文件,每當我看到某個符號時,我想在文本文件中的某個點上將文本寫入文本文件。我如何讀寫scala中的同一個文件?

比如我讀它包含一個文件:

大家好,我的名字「」,這是一個文本文件。

因此,當閱讀文件時,我想寫一些東西給它,當我看到符號「」;我將如何去在scala中做這件事?

+1

它不會工作,很容易。當文件加載到內存時,其內容的組成字節位於連續的內存單元中(不是真的,但足夠接近)。當您在撇號中寫入新內容時,您會覆蓋下一個字節。所以,如果你這樣做的方式是天真的,並寫下「艾倫」,你最終會得到「你好我的名字是」艾倫德這是一個文本文件。「你應該讀取文件到一個緩衝區,操作,然後覆蓋這個文件,順便說一句,因爲你自5年前以來第一次使用了插入密鑰,這個血腥的事情仍然有效! – mszymborski

+0

我建議你從一個文件中讀取數據(你可以在Scala中用Source來偷懶。 fromFile(...)。getLines'返回迭代器)並寫入另一個 – dk14

+0

你可以讀取每行處理它並寫入其他文件,然後刪除舊的文件,並重新命名新文件? – igx

回答

0

如果問題仍然相關:您可能會對Java的FileChannel感興趣,它允許您讀取和寫入文件中的任意字節偏移量。

甲骨文甚至提供了一個示例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