Java file.delete() возвращает false, но file.exists() возвращает true
Когда я пытаюсь удалить файл, который присутствует в tomcat-сервере conf/Catalina/localhost из java-кода, тогда file.delete() всегда возвращает false. Но если я проверяю файл с помощью функции file.exists(), он возвращает true. Я не получаю никаких исключений. Пожалуйста, помогите нам, почему это происходит. Какое решение для этого?
Ответы
Ответ 1
Когда я пытаюсь удалить файл, который присутствует на сервере tomcat conf/Catalina/localhost из java-кода, тогда file.delete() всегда возвращает false. Но если я проверяю файл с помощью функции file.exists() он возвращает true.
Скорее всего у вас нет разрешения для удаления файлов на сервере. Проверьте свои права.
f.delete()
возвращает false, это означает, что он не был/не может быть удален, а f.exists()
возвращает true, поэтому файл существует, но не может быть удален.
Ответ 2
Существует множество причин, по которым невозможно удалить файл; он может не существовать, он может быть непустым каталогом, возможно, вы не закрыли все ресурсы, используя его, и ваша программа может не иметь разрешения на это, чтобы назвать несколько.
К сожалению, метод File.delete()
предоставляет очень мало информации о том, почему; это в значительной степени зависит от вас, чтобы тыкать и понять это. Но есть хорошие новости; вы не хотите использовать File
в первую очередь.
Java 7 представила новый пакет java.nio.file
, который является гораздо более надежным API доступа к файлам. Он предоставляет концепцию абстрактного Path
и разделяет конкретные операции на Files
, в частности, он обеспечивает Files.delete()
, который документирован для получения четких исключений, описывающих причины, по которым может произойти удаление.
Используйте Path
и Files
; вы будете рады, что вы это сделали.
Ответ 3
Вы должны закрыть поток перед его удалением.
e.g -
fileInputStream.close();
file.delete();
Ответ 4
Если каталог не пуст, то метод File.delete()
возвращает false, не вызывая ошибку.
Вы должны очистить каталог перед удалением.
Ответ 5
Это означает, что файл существует, но ваш java-процесс не имеет разрешения на его удаление. Вот почему функция delete возвращает false
Returns:
true if and only if the file or directory is successfully deleted; false otherwise
Ответ 6
перед удалением файла вы должны закрыть все подключения для чтения и записи файла после того, как файл будет удален на 100%
например buffedreader.close() outputstream.close()