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

Java 我想编辑文本文件中的部分行,java,text-files,edit,Java,Text Files,Edit,当运行上面的代码时,我得到了一个空文件“tmpfiles.txt”和“正在删除files.txt。有人能帮忙吗?我不想使用字符串来读取文件。我更愿意按照他的方式来做。一个快速测试证实,没有像我在上面的评论中写的那样关闭作者实际上会产生你描述的行为 加上 BufferedReader br = null; BufferedWriter bw = null; try { br = new BufferedReader(new FileReader(oldFileName)); bw = ne

当运行上面的代码时,我得到了一个空文件“tmpfiles.txt”和“正在删除files.txt。有人能帮忙吗?我不想使用字符串来读取文件。我更愿意按照他的方式来做。

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

加上

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);

最后
块,您的程序就会工作。

文件永远不会写入,因为写入程序从未“刷新”。关闭写入程序时,缓冲区中的所有数据将自动写入文件。习惯于在try-catch块中关闭流的标准。

我在代码中发现了一些问题

首先,这一行似乎不正确:

if (bw != null) {
  bw.close();
}
应该是:

if (line.contains("Smokey")){
      line = line.replace("Smokey;","AAAAAA;");
      bw.write(line+"\n");
并且,您应该在完成bw后刷新并关闭它

if (line.contains("Smokey;")){
      line = line.replace("Smokey;","AAAAAA;");
      bw.write(line+"\r\n");

如果我错了,请纠正我。

您从未关闭过编写器,这可能是问题所在。旁注:
if(line.contains(“Smokey”))line=line.replace(“Smokey;”,aaaaaaa;”您似乎有两个额外的分号
if (bw != null){
    bw.flush();
    bw.close();
}