我将以下代码放入自定义方法中。
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();
}
}