繁体   English   中英

.delete和.rename不能使用Java

[英].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(); }

声明布尔变量(如successsuccess1success2 )毫无意义 ,因为无论如何它们都不会做。

这是我将创建此方法的方式,但随后又...每个人的操作都有些不同:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM