[英].delete and .renameTo not working Java
运行我的程序后,该方法似乎真的不起作用(删除并重命名为不起作用)。 创建了“ tempuserlist”文件,但未将其重命名为“ userlist”。 “用户列表”不会被删除,“ userFile”也不会被删除。 我看过多个有关类似问题的文章,但都没有成功。 我已经使用import java.io.File;
static void DeleteUser (String[] username) throws IOException
{
BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in));
String response;
System.out.print ("Are you sure you would like to delete this account/username (y/n)? ");
response = stdin.readLine ();
if (response.equals ("y") || response.equals ("Y") || response.equals ("yes") || response.equals ("Yes"))
{
BufferedReader reader = new BufferedReader (new FileReader ("G:\\MP3Folder\\userlist.txt"));
BufferedWriter writer = new BufferedWriter (new BufferedWriter (new FileWriter ("G:\\MP3Folder\\tempuserlist.txt")));
String line = null;
while ((line = reader.readLine ()) != null)
{
if (username [0].equals (line))
{
continue;
}
writer.write (line);
writer.newLine ();
}
writer.close ();
reader.close ();
File userFile = new File ("G:\\MP3Folder\\" + username [0] + ".txt");
boolean success2 = userFile.delete ();
File n = new File ("G:\\MP3Folder\\userlist.txt");
boolean success1 = n.delete ();
File o = new File ("G:\\MP3Folder\\tempuserlist.txt");
boolean success = o.renameTo (n);
System.out.println ("\nUser deleted.");
}
else
{
System.out.println ("\nAccount deletion cancelled.");
return;
}
}
您输入的代码正确无误。 更改路径后,相同的代码在我的环境中也可以正常工作。 您需要将路径从G:更改为另一个本地目录,例如C:或D:
整个DeleteUser()方法都是从一开始就令人怀疑的。 我不明白您为什么要传递一个字符串数组( username ),该字符串显然仅被编码为删除一个用户文件,而该用户将是字符串数组的第一个元素中包含的那个(除非您当然不是告诉我们一切)。 方法声明应为:
private static void deleteUser(String username) { .......... }
无论如何...另一件事,我们到底如何知道username.txt文件甚至存在于:
File userFile = new File("G:\\MP3Folder\\" + username[0] + ".txt");
boolean success2 = userFile.delete ();
如果没有,则将引发FileNotFound异常 ,并且剩余的代码将不会播放。 您也许应该具有:
File userFile = new File("G:\\MP3Folder\\" + username[0] + ".txt");
if (userFile.exists()) { userFile.delete(); }
声明布尔变量(如success , success1和success2 )毫无意义 ,因为无论如何它们都不会做。
这是我将创建此方法的方式,但随后又...每个人的操作都有些不同:
private static void deleteUser(String userName) {
String[] TheButtons = {"YES - Delete","NO - Don't Delete"};
int res = JOptionPane.showOptionDialog (null, "Are you sure you would like to delete the account/username\n"
+ "titled: " + userName, "Delete User Account", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE, null, TheButtons, TheButtons[1]);
// NO selected
if (res == 1) {
System.out.println ("\nAccount Deletion Cancelled.");
return;
}
try {
try (BufferedReader reader = new BufferedReader (new FileReader("G:\\MP3Folder\\userlist.txt"));
BufferedWriter writer = new BufferedWriter (new BufferedWriter(new FileWriter("G:\\MP3Folder\\tempuserlist.txt")))) {
String line = null;
while ((line = reader.readLine ()) != null) {
if (userName.equals(line)) { continue; }
writer.write (line);
writer.newLine ();
}
}
File userFile = new File ("G:\\MP3Folder\\" + userName + ".txt");
if (userFile.exists()) { userFile.delete(); }
File n = new File ("G:\\MP3Folder\\userlist.txt");
File o = new File ("G:\\MP3Folder\\tempuserlist.txt");
if (n.exists() && o.exists()) {
n.delete();
o.renameTo(n);
System.out.println ("\nUser Deleted!");
}
else {
System.out.println ("\nError - File Not Found! - User Not Deleted!");
}
}
catch (IOException ex) {
System.out.println ("\nIO Exception Encountered!\n\n" + ex.getMessage());
}
}
大家好,感谢那些立即给予支持和建议的人。 在发现初始化它们后未关闭的BufferReader和BufferWriter之后,我已修复了我的问题。 由于程序仍使用username.txt,因此无法删除或重命名文件。
@DevilsHnd我首先拥有一个用户名数组,因为此方法只是计算机科学最终作业(600行代码)的一小部分,而其他方法则需要该数组。 我尝试使用布尔值是出于随机原因,希望它能正常工作。 如果“ username.txt”存在,我不需要任何验证,因为如果我的程序首先运行,则必须存在。 抱歉,缺乏见识和背景信息,但感谢您的帮助。
@Crusauderpyro感谢您亲自尝试代码。 尽管我使用的是外部驱动器(USB),但问题不存在,因为它现在可以正常运行。 谢谢您的帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.