我有1个文件,其中包含一些需要更新的字符串。
MY REPORT
REPORT RUN DATE : 27/08/2012 12:35:11 PAGE 1 of @TOTAL@
SUCCESSFUL AND UNSUCCESSFUL DAILY TRANSACTIONS REPORT
---record of data here----
MY REPORT
REPORT RUN DATE : 27/08/2012 12:35:11 PAGE 2 of @TOTAL@
SUCCESSFUL AND UNSUCCESSFUL DAILY TRANSACTIONS REPORT
---record of data here----
如果我只想将@ TOTAL @的所有出现更新为某个数字,是否有快速有效的方法来执行此操作?
据我所知,我也可以使用BufferedReader + BufferedWriter打印到另一个文件并沿途使用String.replace,但我想知道是否有更好更优雅的方法来解决这个问题......
文件不会超过10MB,因此无需担心文件是否大(超过1 GB等)
答案 0 :(得分:2)
如果您不关心文件太大,并且认为在每一行上调用replace()
都不够优雅,我想您可以将整个文件读入一个字符串,调用replace()
一次,然后将其写入文件。
答案 1 :(得分:1)
......我想知道是否有一种更好,更优雅的方法来解决这个问题
这取决于你所说的“更好和更优雅”,但IMO答案是否定的。
文件不会超过10MB,因此无需担心文件是否大(超过1 GB等)
您不可能超过1Gb。但是:
您可能无法100%确定该文件不会大于10Mb。对于任何具有重要生命周期的程序,您很少知道要求和使用模式不会随着时间的推移而发生变化。
实际上,如果将整个批次加载到StringBuilder中,则10Mb文本文件可能占用高达60Mb的内存。首先,字节被夸大为字符。其次,StringBuilder用于管理其后备数组的算法涉及分配一个比原始数组大两倍的新数组。因此,峰值内存使用量可能是您正在读取的文件中字节数的6倍。
请注意,60Mb大于某些平台上某些JVM的默认最大堆大小。