2

我有 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 等)

4

2 回答 2

2

如果您不关心文件太大,并且认为replace()在每一行上调用都不优雅,我想您可以将整个文件读入一个字符串,调用replace()一次,然后将其写入文件。

于 2012-08-27T05:07:29.557 回答
1

...我想知道是否有更好更优雅的方法来解决这个问题

这取决于您所说的“更好和优雅”是什么意思,但 IMO 的答案是否定的。

文件不会超过 10MB,所以不用担心文件是否会很大(超过 1 GB 等)

您不太可能超过 1Gb。然而:

  • 您可能无法 100% 确定文件不会大于 10Mb。对于任何具有重要生命周期的程序,您很少知道需求和使用模式不会随着时间而改变。

  • 事实上,如果将整个文件加载到 StringBuilder 中,一个 10Mb 的文本文件可能会占用多达 60Mb 的内存。首先,字节被膨胀成字符。其次,StringBuilder 用于管理其后备数组的算法涉及分配一个大小为原始数组两倍的新数组。因此,峰值内存使用量可能高达您正在读取的文件中字节数的 6 倍。

  • 请注意,60Mb 大于某些平台上某些 JVM 的默认最大堆大小。

于 2012-08-27T05:59:17.127 回答