我正在逐行读取由固定长度记录组成的文本文件,并附加一些值,然后写入另一个文件.
像往常一样,我使用BufferedWriter,发现它需要大约20分钟来读取,附加值并写入另一个文件.
BufferedWriter br = new BufferedReader(new FileReader(infile));
if (br != null) {
for (String line; (line= br.readLine()) != null;) {
i= i+ 1;
line += " " + String.format("%09d", i) + "S";
try {
bw = new BufferedWriter(new FileWriter("out.txt",
true));
bw.write(line);
bw.newLine();
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我用过的代码.读取整个文件并附加值仅需7秒,但写入文件似乎很慢.我知道BufferedWriter的速度要慢得多.我没有增加缓冲区大小,因为我正在逐行阅读,出于同样的原因没有尝试nio.
建议我提高速度的方法?
你在这里至少有两个问题:
try-with-resources块(Java 7)或try/finally块(Java 7之前版本)后者不会是性能问题,但它可能会破坏其他需要关闭文件的代码.
此外,我强烈建议不要使用FileReader或FileWriter,因为两者都使用平台默认编码,而不允许您指定任何其他内容.如果您使用的是Java 7,使用Files.newBufferedReader以及Files.newBufferedWriter其中: