Разве это не пустой цикл while?
у вас есть:
try
{
...code
}
finally
{
}
while (something);
поместите туда пробел, и вы на самом деле получите:
try
{
...code
}
finally
{
}
while (something)
;
ваш цикл while не связан с вашим try / finally. если исходный оператор try завершается неудачно и файл не создается, цикл while никогда не завершится, потому что try / finally никогда не будет выполнен во второй раз.
Вы намеревались сделать это do {весь ваш код} while (ваше заявление while)?
потому что это не то, что у вас там.
ИЗМЕНИТЬ, чтобы уточнить:
Я бы предложил изменить цикл while, чтобы получить больше информации о том, почему он не может удалить:
while (!file.delete())
{
if (!file.exists())
break; // the file doesn't even exist, of course delete will fail
if (!file.canRead())
break; // the file isn't readable, delete will fail
if (!file.canWrite())
break; // the file isn't writable, delete will fail
}
потому что, если удаление завершится неудачно один раз, оно просто будет повторяться снова и снова, конечно же, оно будет зависать там. вы не меняете состояние файла в цикле.
Теперь, когда вы добавили другую информацию, например, Tomcat и т. Д., Это проблема с разрешениями? Вы пытаетесь записать файл, который запускает пользователь tomcat, поскольку (никто?) vm не может создать? или удалить файл, который процесс tomcat не может удалить?
Если проводник процесса / etc скажет, что java заблокировал файл, то у чего-то еще есть открытый поток, использующий его. кто-то мог неправильно вызывать close () для каких-либо потоков, записывающих в файл?