File delete java не удаляет файл

Обновлено: 07.07.2024

Я хочу создать и удалить каталог с помощью Java, но это не работает.

Java не может удалять папки с данными в нем. Перед удалением папки необходимо удалить все файлы.

использовать что-то вроде:

тогда вы сможете удалить папку, используя index.delete() Неиспытанная!

только одна строка.

это работает, и хотя кажется неэффективным пропустить тест каталога, это не так: тест происходит сразу в listFiles() .

обновление, чтобы избежать следующих символических ссылок:

в JDK 7 Вы можете использовать Files.walkFileTree() и Files.deleteIfExists() для удаления дерева файлов.

в JDK 6 один из возможных способов-использовать пакета fileutils.deleteQuietly из Apache Commons, который удалит файл, каталог или каталог с файлами и подкаталогами.

используя Apache Commons-IO, он следует за однострочным:

Это (немного) более эффективно, чем FileUtils.deleteDirectory .

Я предпочитаю это решение на java 8:

моя базовая рекурсивная версия, работающая со старыми версиями JDK:

Это лучшее решение для Java 7+ :

мне больше всего нравится это решение. Он не использует стороннюю библиотеку, вместо этого он использует NIO2 Java 7.

это означает, что вы создаете файл снова после удаления .исключить () возвращает логическое значение.Поэтому, если вы хотите проверить, сделайте System.out.println(index.delete()); если вы true то это означает, что файл удален

С комментарии приведенный ниже обновленный ответ выглядит следующим образом

гуава 21 + на помощь. Использовать только если нет симлинки, указывающие из каталога удалить.

(этот вопрос хорошо индексируется Google, поэтому другие люди usig Guava могут быть рады найти этот ответ, даже если он избыточен с другими ответами в другом месте.)

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

Если у вас есть подпапки, вы найдете проблемы с ответами Cemron. поэтому вы должны создать метод, который работает так:

вы можете сделать рекурсивный вызов, если подкаталоги существуют

работает и для вложенных каталогов.

удалить его из другой части

вы можете попробовать следующие

Если в вашей папке есть подпапки, вам может потребоваться рекурсивно удалить их.

Я хочу создать и удалить каталог с помощью Java, но он не работает.

Java не может удалять папки с данными в нем. Перед удалением папки необходимо удалить все файлы.

Используйте что-то вроде:

Затем вы сможете удалить папку с помощью index.delete() Непроверенные!

Это работает, и хотя это выглядит неэффективно, чтобы пропустить тест каталога, это не так: тест происходит сразу в listFiles() .

Обновление, чтобы избежать следующих символических ссылок:

В JDK 7 вы можете использовать Files.walkFileTree() и Files.deleteIfExists() для удаления дерева файлов.

В JDK 6 одним из возможных способов является использование FileUtils.deleteQuietly из Apache Commons, который удалит файл, каталог или каталог с файлами и подкаталогами.

Используя Apache Commons-IO, он выглядит следующим образом:

Это (немного) более производительно, чем FileUtils.deleteDirectory .

Я предпочитаю это решение на Java 8:

Моя базовая рекурсивная версия, работающая со старыми версиями JDK:

Это лучшее решение для Java 7+ :

Как уже упоминалось, Java не может удалить папку, содержащую файлы, поэтому сначала удалите файлы, а затем папку.

Вот простой пример, чтобы сделать это:

Гуава 21+ на помощь. Используйте только в том случае, если нет символических ссылок, указывающих на удаляемый каталог.

(Этот вопрос хорошо проиндексирован Google, поэтому другие пользователи Usig Guava могут с удовольствием найти этот ответ, даже если он лишний с другими ответами в другом месте.)

Мне нравится это решение больше всего. Он не использует стороннюю библиотеку, вместо этого он использует NIO2 Java 7.

Это означает, что вы снова создаете файл после удаления File.delete() возвращает логическое значение. Поэтому, если вы хотите проверить, тогда выполните System.out.println(index.delete()); , если вы получите true , тогда это означает этот файл удален

из комментариев ниже, обновленный ответ выглядит следующим образом

Вы можете использовать FileUtils.deleteDirectory. JAVA не может удалить непустые фолды с помощью File.delete().

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

Если у вас есть подпапки, вы найдете проблемы с ответами Cemron. поэтому вы должны создать метод, который работает следующим образом:

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

любая помощь была бы весьма признательна!

теперь у меня есть:

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

обязательно узнайте свой текущий рабочий каталог и напишите свой путь к файлу относительно него.

. распечатает этот каталог.

кроме того, не связанный с вашим вопросом, попробуйте использовать File.separator чтобы оставаться независимой от ОС. Символы работают только на Windows.

проблема также может быть связана с любыми выходными потоками, которые вы забыли закрыть. В моем случае я работал с файлом до того, как файл был удален. Однако в одном месте в файловых операциях я забыл закрыть выходной поток, который я использовал для записи в файл, который пытался удалить позже.

У меня такая же проблема! потом понял, что мой каталог не пуст. Я нашел решение в другой теме: не удалось удалить каталог через Java

Я подозреваю, что проблема в том, что путь неверен. Попробуйте это:

Если вы хотите удалить файл сначала закрыть все соединения и потоки. после этого удалите файл.

в моем случае это был close (), который не выполнялся из-за необработанного исключения.

предположим, что исключение выбрасывается на parse (), который не обрабатывается в этом методе, и поэтому файл не закрывается, вниз по дороге, файл удаляется, и этот оператор delete терпит неудачу и не удаляет.

Итак, вместо этого у меня был такой код, тогда он работал.

Итак, базовая Java, которую мы иногда упускаем из виду.

попробуйте закрыть все FileOutputStream/FileInputStream вы открыли ранее в других методах, затем попробуйте удалить, работали как шарм.

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

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

This is currently what I have to delete the file but it's not working. I thought it may be permission problems or something but it wasn't. The file that I am testing with is empty and exists, so not sure why it doesn't delete it.

Any help would be GREATLY appreciated!

To try and find the correct path at run time so that if the program is transferred to a different computer it will still find the file.


5,354 67 67 gold badges 52 52 silver badges 125 125 bronze badges 527 1 1 gold badge 5 5 silver badges 7 7 bronze badges Are any exceptions thrown? What is the return value of the file.delete() call? Also remember to close any possible programs that could have the file open in it. I was trying to delete a db while it was open in a db browser.

12 Answers 12

The problem could also be due to any output streams that you have forgotten to close. In my case I was working with the file before the file being deleted. However at one place in the file operations, I had forgotten to close an output stream that I used to write to the file that was attempted to delete later.

821 1 1 gold badge 6 6 silver badges 5 5 bronze badges Same concept, but I found that I had to close input streams. Its works after FileInputStream/FileOutputStream closed. thanks a lot. This was the last I could think of, but you are right. Closing the file correctly (not just flush) resolves the issue.

Be sure to find out your current working directory, and write your filepath relative to it.

. will print out that directory.

Also, unrelated to your question, try to use File.separator to remain OS-independent. Backslashes work only on Windows.


20.4k 9 9 gold badges 43 43 silver badges 82 82 bronze badges 9,100 3 3 gold badges 41 41 silver badges 74 74 bronze badges

I got the same problem! then realized that my directory was not empty. I found the solution in another thread: not able to delete the directory through Java

Try closing all the FileOutputStream/FileInputStream you've opened earlier in other methods ,then try deleting ,worked like a charm.


3,015 4 4 gold badges 34 34 silver badges 42 42 bronze badges


I suspect that the problem is that the path is incorrect. Try this:

652k 90 90 gold badges 750 750 silver badges 1128 1128 bronze badges

If you want to delete file first close all the connections and streams. after that delete the file.


In my case it was the close() that was not executing due to unhandled exception.

Assume exception is being thrown on the parse(), which is not handled in this method and therefore the file is not closed, down the road, the file is being deleted, and that delete statement fails, and do not delete.

So, instead I had the code like this, then it worked.

so basic Java, which sometimes we overlook.

6,668 2 2 gold badges 34 34 silver badges 28 28 bronze badges

I made the mistake of opening a BufferedReader like:

. and of course I could not execute the f.delete() because I wrapped the FileReader instead of instantiating its own variable where I could explicitly close it. Duh.

I could issue a br.close(); br=null; fread.close(); fread=null; and the f.delete() worked fine.


In my case I was processing a set of jar files contained in a directory. After I processed them I tried to delete them from that directory, but they wouldn't delete. I was using JarFile to process them and the problem was that I forgot to close the JarFile when I was done.

Читайте также: