我将以下代码放入自定义方法中。

File inputFile = new File("F:\\EmployeePunch\\EmployeePunch\\src\\employeepunch\\original.txt");   // Your file
File tempFile = new File("F:\\EmployeePunch\\EmployeePunch\\src\\employeepunch\\temp.txt");// temp file
BufferedReader reader = null;
BufferedWriter writer = null;
try{
reader = new BufferedReader(new FileReader(inputFile));
writer = new BufferedWriter(new FileWriter(tempFile));

String firstName = chosenEmployee.getFirstName();
String lastName = chosenEmployee.getLastName();

String currentLine;

while((currentLine = reader.readLine()) != null) {

    if(currentLine.contains(firstName)
         && currentLine.contains(lastName)) continue;

    writer.write(currentLine);
}
    }
    catch (IOException e) {
        e.printStackTrace();
        }finally{
            try {
                inputFile.delete();
                writer.close();
                boolean successful = tempFile.renameTo(inputFile);
                System.out.println(successful);
            } catch (IOException ex) {
               ex.printStackTrace();
            }

        }


问题是;每当我运行程序时,renameTo都会失败;但它确实创建了temp.txt,其中应正确删除了该行。

为什么renameTo总是返回false?

编辑1:在Windows中的其他任何地方都无法打开文件。它们在我的IDE的项目资源管理器中列出,但未由我的IDE打开。

最佳答案

renameTo()的javadoc说:


重命名操作可能无法将文件从一个文件系统移动到另一个文件系统,它可能不是原子的,如果具有目标抽象路径名的文件已经存在,则重命名操作可能不会成功。


尝试关闭所有文件(您没有关闭reader,因此它仍在“使用中”)并首先删除输入文件:

} finally {
    try {
        inputFile.delete();
        reader.close();
        writer.close();
        inputFile.delete();
        boolean successful = tempFile.renameTo(inputFile);
        System.out.println(successful);
    } catch (IOException ex) {
           ex.printStackTrace();
    }

}

09-09 22:26