在常规的文本文件的特定行开始循环(Start loop at specific line of te

2019-09-28 04:40发布

我使用Groovy和我想有一个文本文件,在特定的行被改变,而无需通过以前所有的线循环。 有没有办法说出要希望改变文本文件的行?

例如

文本文件:

1
2
3
4
5
6

我想说

Line(3) = p

并将其更改文本文件:

1
2
p
4
5
6

我不想一直做一个遍历行迭代更改值,又名我不想使用.eachline {线 - > ...}方法。

谢谢你在前进,我真的很感激!

Answer 1:

我不认为你可以跳过线和穿越这个样子。 你可以通过做跳跃随机访问文件在Java中,但不是你行应指定的字节数。



Answer 2:

尝试使用readLines()在文件中的文本。 它将存储列表中的所有台词。 要改变在第n行的内容,在名单上的N-1指数变化的内容,然后在列表项加入。 像这样的东西会做

//We can call this the DefaultFileHandler

lineNumberToModify = 3
textToInsert = "p"

line( lineNumberToModify, textToInsert )

def line(num , text){
    list = file.readLines()
    list[num - 1]  = text        
    file.setText(list.join("\n"))
}

编辑:对于非常大的文件,最好是你有一个自定义实现。 可能是在什么蒂姆·耶茨在对你的问题的意见建议了线的东西。 上述readlines方法()可高达100000行文字内小于仲丁基容易处理。 所以,你可以这样做:

if(file size < 10 MB)
   use DefaultFileHandler()
else
   use CustomFileHandler()


//CustomFileHandler

 - Split the large file into buckets of acceptable size.
 - Ex: Bucket 1(1-100000 lines), Bucket 2(100000-200000 lines), etc.
 - if (lineNumberToModify falls in bucket range)
      insert into line in the bucket

没有一成不变的规则来定义你如何实现你的CustomFileHandler,因为它完全取决于所使用的情况。 如果您需要多次做上述操作在同一个文件,你可以选择先做完整斗分裂,将它们存储在存储器中,并使用桶进行以下操作。 或者,如果它是一个时间的操作,就可以避免第一次操纵所有的桶,但对付你只需要什么,后来在按需的基础处理等。

而且即使在桶,你可以定义自己的智慧,加快你的工作。 说,如果你要插入到99999线铲斗相1-100000线,你可以利用常规的方法和关闭,以最充分,

file.readLines().reverse()[1] = "some text" 


文章来源: Start loop at specific line of text file in groovy
标签: groovy io