BufferedReader br = null;
BufferedWriter bw = null;
try {
br = new BufferedReader(new FileReader(oldFileName));
bw = new BufferedWriter(new FileWriter(tmpFileName));
String line;
while ((line = br.readLine()) != null) {
if (line.contains("Smokey")){
line = line.replace("Smokey;","AAAAAA;");
bw.write(line+"\n");
} else {
bw.write(line+"\n");
}
}
}
catch (Exception e) {
return;
} finally {
try {
if(br != null){
br.close();
messagejLabel.setText("Error");
}
} catch (IOException e) {
}
}
// Once everything is complete, delete old file..
File oldFile = new File(oldFileName);
oldFile.delete();
// And rename tmp file's name to old file name
File newFile = new File(tmpFileName);
newFile.renameTo(oldFile);
当运行上面的代码时,我最终得到一个空文件“tmpfiles.txt”,文件“files.txt正在被删除。有人可以帮忙吗?我不想用字符串来读取文件。我我宁愿按照自己的方式去做。
答案 0 :(得分:3)
快速测试证实,我在上面的评论中写的并没有关闭作者,实际上会产生你描述的行为。
添加
if (bw != null) {
bw.close();
}
到您的finally
区块,您的计划正常运作。
答案 1 :(得分:1)
我在您的代码中发现了一些问题。
首先,这条线似乎不正确:
if (line.contains("Smokey")){
line = line.replace("Smokey;","AAAAAA;");
bw.write(line+"\n");
它应该是:
if (line.contains("Smokey;")){
line = line.replace("Smokey;","AAAAAA;");
bw.write(line+"\r\n");
并且,你应该在完成之后冲洗并关闭bw。
if (bw != null){
bw.flush();
bw.close();
}
如果我错了,请纠正我。
答案 2 :(得分:0)
永远不会写入文件,因为编写器从未被“刷新”。关闭writer时,缓冲区中的所有数据都会自动写入文件。习惯使用流的标准,在try-catch块中关闭它们。