java - Java - 无法使用 File .delete() 删除文件
问题描述
所以我使用以下代码基本上从文件中删除一行,方法是编写一个包含除该行之外的所有内容的临时文件,然后删除旧文件并将新文件名设置为旧文件。
唯一的问题是无论我做什么,delete()
方法和renameTo()
方法都会返回。false
我在这里查看了大约 20 个不同的问题,但他们的解决方案似乎都没有帮助。这是我正在使用的方法:
public void deleteAccount(String filePath, String removeID)
{
String tempFile = "temp.csv";
File oldFile = new File(filePath);
File newFile = new File(tempFile);
String firstname = "";
String lastname = "";
String id = "";
String phonenum = "";
String username = "";
String password = "";
String accounttype = "";
try
{
FileWriter fw = new FileWriter(newFile, true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
Scanner reader = new Scanner(new File(filePath));
reader.useDelimiter("[,\n]");
while (reader.hasNext())
{
firstname = reader.next();
lastname = reader.next();
id = reader.next();
phonenum = reader.next();
username = reader.next();
password = reader.next();
accounttype = reader.next();
if (!id.equals(removeID))
{
pw.println(firstname + "," + lastname + "," + id + "," + phonenum + "," + username + "," + password
+ "," + accounttype + ",");
}
}
reader.close();
pw.flush();
pw.close();
oldFile.delete();
System.out.println(oldFile.delete());
File dump = new File(filePath);
newFile.renameTo(dump);
System.out.println(newFile.renameTo(dump));
} catch (Exception e)
{
}
}
被解析为 String 的filePath
String 是"login.csv"
在较早的方法中读取的,但读取器肯定会关闭。
编辑:这就是 login.csv 的样子。
John,Doe,A1,0123456789,johnd,password1,Admin
Jane,Doe,A2,1234567890,janed,password2,CourseCoordinator
John,Smith,A3,2345678901,johns,password3,Approver
Jane,Smith,A4,356789012,johns,password4,CasualStaff
Josh,Males,A5,0434137872,joshm,password5,Admin
解决方案
您调用该delete()
方法两次 - 一次不使用返回值 ( oldFile.delete()
),第二次打印返回值 ( System.out.println(oldFile.delete())
)。
第二次调用将始终返回false
- 因为两次删除尝试都将因相同的原因而失败,或者因为第一次会成功(因此第二次将失败,因为文件不再存在)。
您正在寻找的语法是这样的:
boolean deletionResult = oldFile.delete();
System.out.println("Deletion result is " + deletionResult);
推荐阅读
- python - 如何使用 cv2 覆盖/替换图像的一部分?
- c++ - 使用 nanoflann 搜索最近邻
- sql-server - SQL Server 比较 2 个表中的列并更新第二个表中的另一列
- raspberry-pi3 - 通过 NTP 精确同步 RPI CPU 时钟
- c# - 使用 xamarin.forms 将数据传回主页
- java - 当我从 Android 迁移到 AndroidX 时,在我的项目中实现 google play 服务时出错。解决方案可能是什么?
- r - 根据R中的匹配ID替换二分变量的值
- c++ - 用于比较原始类型的 std::optional 的有趣程序集
- javascript - 在 Angular 6 组件 html 中全局访问 js 对象
- azure - Fluent Migrator 在 azure/kudu 中等待用户输入