Java - Невозможно удалить файл с помощью File .delete () - PullRequest
0 голосов
/ 07 мая 2018

поэтому я использую следующий код, чтобы в основном удалить одну строку из файла, записав временный файл со всем, кроме этой одной строки, а затем удаляя старый файл и устанавливая имя нового файла в старое.

Единственная проблема заключается в том, что метод 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)
    {

    }

}

Строка, которая обрабатывается в 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

1 Ответ

0 голосов
/ 07 мая 2018

Вы вызываете метод delete() дважды - один раз без использования возвращаемого значения (oldFile.delete()) и второй раз с печатью возвращаемого значения (System.out.println(oldFile.delete())).

Второй вызов всегда будет возвращать false - либо потому, что обе попытки удаления потерпят неудачу по одной и той же причине, либо потому, что первая попытка будет успешной (и, следовательно, вторая попытка завершится неудачей, поскольку файла больше нет).

Синтаксис, который вы ищете, выглядит примерно так:

boolean deletionResult = oldFile.delete();
System.out.println("Deletion result is " + deletionResult);
...