Проблемы с удалением файла с Java (apache commons io) - PullRequest
9 голосов
/ 12 мая 2011

Я вызываю метод C ++ через JNI, который создает два файла.Текстовый файл журнала и файл PDF в данном каталоге.Я хочу удалить эти файлы (если они существуют) перед выполнением метода JNI.

Я использую Apache commons.io (FileUtils.forceDelete (File file)) для этого.При выполнении я получаю IOException:

java.io.IOException: Unable to delete file: D:\Folder\file.log

Я проверяю состояние записи файла перед запуском метода удаления с помощью метода File.canWrite ().Он возвращает true как для файла, так и для родительского каталога.

У вас есть идея, почему у меня возникают проблемы при удалении файла?Насколько я знаю, метод C ++, который создает файлы, закрывает или разблокирует их после завершения метода.В любом случае, у меня нет доступа к исходному коду C ++, поэтому я не могу проверить, так ли это на самом деле, или изменить код.

Спасибо, Марко

Ответы [ 3 ]

7 голосов
/ 12 мая 2011

Он почти наверняка заблокирован другим процессом.Если это еще один процесс, блокирующий на уровне ОС (скажем, у вас есть файл, открытый в текстовом редакторе), то вам не повезет.Даже Windows Explorer может не удалить файл, если что-то еще его блокирует.Однако посмотрите на java.nio.channels.FileLock для соответствующих вызовов API.

2 голосов
/ 12 мая 2011

Скорее всего, другой процесс сохраняет file.log открытым, что помешает его удалению.

0 голосов
/ 19 июля 2016

Я использую Eclipse 4.x и jre 1.7, веб-приложение развернуто на tomcat 7.

У меня та же проблема при попытке удалить файлы из моего контроллера Spring.

File f = new File("/home/me/my/file/liveshere/smallfile.txt");
f.delete();

Он не работает из веб-приложения.Но ... он работает в автономном Java-приложении, запущенном из той же IDE.

Возможно, Tomcat блокирует папку, поскольку я читал ранее (но только путем создания экземпляра класса File ()).Я явно не использую потоки.

Я также пытался использовать библиотеку commons.io для FileUtils.forceDelete (f), но все равно не испытывал радости.

...