我想编辑文本文件中的部分行

时间:2012-11-21 14:41:06

标签: java text-files edit

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正在被删除。有人可以帮忙吗?我不想用字符串来读取文件。我我宁愿按照自己的方式去做。

3 个答案:

答案 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块中关闭它们。