4
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 正在被删除。谁能帮忙?我不想使用字符串来读取文件。我宁愿按照他的方式去做。

4

3 回答 3

3

快速测试证实,没有像我在上面的评论中写的那样关闭作者实际上会产生你描述的行为。

只需添加

if (bw != null) {
  bw.close();
}

到你的finally街区,你的程序就可以工作了。

于 2012-11-21T14:55:18.447 回答
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();
}

如我错了请纠正我。

于 2012-11-21T14:58:20.163 回答
0

该文件永远不会被写入,因为写入器从未“刷新”过。关闭写入器时,缓冲区中的所有数据都会自动写入文件。习惯使用流的标准,在 try-catch 块中关闭它们。

于 2012-11-21T14:56:18.937 回答