Как удалить текстовый файл при использовании Tomcat и сервлетов? - PullRequest
2 голосов
/ 11 января 2010

Я работаю в приложении, использующем Tomcat и сервлеты.

Существует сервлет (audioProcess), который получает имя воспроизводимого mp3-файла. Этот сервлет также обрабатывает файл mp3 и сохраняет результат в текстовом файле. Содержимое этого txt будет заменено при повторном вызове сервлета audioProcess (с другим mp3-файлом).

Каждый раз, когда этот сервлет вызывается, я удаляю txt и создаю новый (содержащий информацию о mp3-файле). Имя текстового файла всегда одинаково.

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

File a = new File(path_clasificacion);

if(a.exists())
{
  boolean erased = a.delete();
  out.println("erased?" + erased);
}

При первом запуске сервлета текстовый файл стирается. Только в первый раз. После удаления TXT-файла я пытаюсь записать новую информацию в TXT-файл с тем же именем (хранится по тому же пути). Случается так, что старый файл не стирается, новая информация добавляется в файл.

Почему я не могу удалить файл?

Спасибо

TXT-файл создается с использованием этого кода:

FileWriter f = null;
PrintWriter pw = null;

try
{
 f = new FileWriter(path,true);   
 pw = new PrintWriter(f);   
 pw.println(info);              
} catch (Exception e) {e.printStackTrace();

finally 
{
 f.close();
}

1 Ответ

4 голосов
/ 11 января 2010

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

Просмотрите ваш код и обязательно close() любые потоки или читатели. Это, очевидно, включает в себя проверку того, что все ссылки на него из кода библиотеки дайджеста MP3 также закрыты.

"Как насчет первого раза?" ты спросишь. Ответ: Вы получили положительный статус от звонка erase(), поскольку запрос на удаление был успешно передан операционной системе. Тем не менее, операционная система все еще вертится, ожидая, когда вы наконец отпустите файл. Таким образом, файл не был действительно (физически) удален даже в первый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...