【发布时间】:2016-03-16 10:18:24
【问题描述】:
经典的命令按预期工作:
static void updateFile(final File pm, final String replace,
final String replacement) {
BufferedReader bri = null;
BufferedWriter out = null;
try {
String fName = pm.getPath() + ".new";
bri = new BufferedReader(new FileReader(pm));
out = new BufferedWriter(new FileWriter(fName));
String line = bri.readLine();
while (line != null) {
if (line.contains(replace)) {
line = line.replace(replace, replacement);
}
out.write(line);
out.newLine();
line = bri.readLine();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
out.flush();
out.close();
bri.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
现在尝试替换:
static void updateFileLambda(final File pm, final String replace,
final String replacement) throws Exception {
String fName = pm.getPath() + ".new";
BufferedReader bri = new BufferedReader(new FileReader(pm));
BufferedWriter out = new BufferedWriter(new FileWriter(fName));
bri.lines().filter(ln -> ln.contains(replace))
.map(ln -> ln.replace(replace, replacement))
.forEach(ln -> {
out.write(ln);
out.newLine();
});
}
1.) 这引发了几个问题并且无法编译,因为 out.write 和 out.writeLine Eclipse mars 告诉我它应该被 try 包围 - 尽管声明了 throws Ecxeption 或者声明被 try 包围-catch 与经典版本一样。
2.) 每一行都应该写入新文件。旧的和新的应该只差一个修改的行。我怀疑,show 解决方案只会将修改后的行写入新文件。
因此,如果有人知道如何正确实现,我将不胜感激!
【问题讨论】:
标签: java lambda functional-programming