java file.delete () возвращает false, но file.exists () возвращает true

Когда я пытаюсь удалить файл, который присутствует на сервере tomcat conf / Catalina / localhost, из кода java, то file.delete () всегда возвращает false. Но если я проверяю файл функцией file.exists (), он возвращает true. Я не получаю никаких исключений. Пожалуйста, помогите нам, почему это происходит. Какое решение для этого?

 m0skit011 мар. 2013 г., 11:45
Проверьте права доступа к файлу.
 Joe201311 мар. 2013 г., 11:45
Вы закрываете входящий поток
 rajesh11 мар. 2013 г., 11:45
если file.delete () возвращает false, то это означает, что он не был удален. Так что file.exists () вернет true. Нет ничего плохого
 vishal11 мар. 2013 г., 12:22
У меня есть решение для этого. На самом деле была ошибка при создании файла. По ошибке я забыл закрыть FileStream. Спасибо всем за ваши предложения.
 Ingo11 мар. 2013 г., 11:45
Файл существует, но не может быть удален. Тот'все.
 MewX29 янв. 2018 г., 01:53
Иногда вам нужно знать о ваших открытых InputStream и OutputStream.

Ответы на вопрос(5)

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

К сожалениюFile.delete() метод дает очень мало информации о том, почему; Это'Это в значительной степени зависит от вас, чтобы поковыряться и разобраться. Но там'хорошие новости; ты нене хочу использоватьFile на первом месте.

Java 7 представила новыйjava.nio.file пакет, который является гораздо более надежным API для доступа к файлам. Это обеспечивает понятие абстрактногоPath и разделяет конкретные операции наFiles класс, в частности это обеспечиваетFiles.delete() который задокументирован, чтобы вызвать явные исключения, описывающие причины, по которым удаление может завершиться неудачей

использованиеPath а такжеFiles; вы'Я буду рад, что ты сделал.

Если каталог не пустой, тоFile.delete() Метод вернет false, не выдав ошибку.

Вы должны очистить каталог перед его удалением.

Решение Вопроса

Когда я пытаюсь удалить файл, который присутствует на сервере tomcat conf / Catalina / localhost, из кода java, то file.delete () всегда возвращает false. Но если я проверяю файл функцией file.exists (), он возвращает true.

Скорее всего у вас нетразрешение для удаления файлов на сервере. Проверьте ваши разрешения.

f.delete() возвращает false это означает, что это не былот / не может быть удален иf.exists() возвращает true, поэтому файл существует, но не может быть удален.

 Simon Dorociak11 мар. 2013 г., 11:54
@vishal, поэтому иногда удаляется, иногда нет. это очень "любопытно» вещь. Так что попробуйте полностью перезагрузить сервер и вы можете проверитьБиблиотека Apache Commons IO (Класс FileUtils)
 Simon Dorociak11 мар. 2013 г., 11:59
а как вы создаете xml? программно?
 Simon Dorociak11 мар. 2013 г., 12:22
@ Vishal, так как я думал. Проблема была в создании XML-файлов.
 vishal11 мар. 2013 г., 11:57
я уже много раз перезагружал сервер. На самом деле то, что я делаю, это то, что я создаю xml-файл в conf / Catalina / localhost динамически, чтобы назначать разные URL для динамического указания на одно и то же приложение. Теперь только по коду я хочу удалить XML по мере необходимости. Тогда я получаю эту проблему.
 vishal11 мар. 2013 г., 11:48
У меня есть полное разрешение сервера. Если я пытаюсь удалить тот же файл, иногда файл удаляется, но максимальное время не удается удалить, и функция возвращает false.
 vishal11 мар. 2013 г., 12:21
у меня есть решение для этого. На самом деле была ошибка при создании файла. По ошибке я забыл закрыть поток файлов. Спасибо за ваши предложения.
 vishal11 мар. 2013 г., 11:53
Есть ли какой-нибудь другой метод или библиотека, которая поможет решить эту проблему. Потому что у меня есть требование удалить файл с помощью кода.
 Simon Dorociak11 мар. 2013 г., 11:49
@ Vishal ты нет, когда это не работает.
 vishal11 мар. 2013 г., 12:26
Да, когда я создавал XML, я открыл файл для записи XML. Но забыл закрыть. Тот'почему я не могу удалить.

Вы должны закрыть поток перед его удалением.

например

fileInputStream.close();
file.delete();

Это означает, что файл существует, но у вашего Java-процесса нет разрешения на его удаление. Поэтому функция удаления возвращает false

Returns: true if and only if the file or directory is successfully deleted; false otherwise

 vishal11 мар. 2013 г., 11:49
Тогда, пожалуйста, скажите мне, как назначить разрешение процессу java для удаления файла. Потому что я все равно должен удалить файл по коду.

Ваш ответ на вопрос