File.delete () удаляет целевой файл только в случайное время - PullRequest
2 голосов
/ 08 мая 2019

Я пытаюсь удалить файл в папке и саму папку, но она только удаляет папку в случайное время.Почему это происходит?Если я продолжу нажимать на кнопку «Удалить», она в конечном итоге будет удалена.

private void deleteCourseButtonMouseClicked(java.awt.event.MouseEvent evt) {
    File dltcycle = new File(C.viewcoursedirectory);
    System.out.println(dltcycle.getAbsolutePath());
    String[] cycle = dltcycle.list();
    for (int i = 0; i < cycle.length; i++) {
        File dlt = new File(C.viewcoursedirectory + "\\" + cycle[i]);
        System.out.println(C.viewcoursedirectory + "\\" + cycle[i]);
        System.out.println(dlt.getAbsolutePath());
        dlt.delete();
    } 
    dltcycle.delete(); 
 }

Ожидаемый результат - последовательное удаление папки в каталоге.Не в случайное время после нажатия кнопки удаления.Извините, если блок кода выглядит безобразно, я не знаю, как его отформатировать.Я не знаю, почему "{" и "}" не появляются в блоке кода: X.

Ответы [ 2 ]

2 голосов
/ 08 мая 2019

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

Проверьте (если вы открываете файл с входными или выходными потоками), если поток всегда закрыт.

1 голос
/ 08 мая 2019

Я бы рекомендовал вместо этого использовать Files.delete (Path) .Этот метод генерирует IOException, чтобы вы могли видеть причину неудачного удаления, а не просто получить бесполезное логическое значение.https://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#delete(java.nio.file.Path)

Путь к файлу можно получить с помощью File.toPath () (так, 'Path p = dlt.toPath ()').

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

...