Ваше мнение важно для нас.
Поделитесь своими предоложениями и пожеланиями.

Не удается удалить файл в Java


Я пытаюсь удалить файл после записи в него:

private boolean writeAndDelete(File file, String fileContent) {
FileOutputStream fos;
try {
fos = new FileOutputStream(file);
fos.write(fileContent.getBytes());
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return file.delete();
}


По какой-то причине, file.delete() возвращает false. Я пробовал проверять file.exists(), file.canRead(), file.canWrite() и file.canExecute() - они все возвращают true, а file.delete() возвращает false и файл не удаляется. Что я делаю не так?
0

Ответы

0
Ссылка
Перед удалением или переименованием файла, нужно сначала закрыть все поточи чтения/записи, например, InputStreamReader, BufferedWriter и т.д.

Когда в файл идет запись или из него читаются данные, то он блокируется соответствующим потоком до тех пор, пока работа с ним не завершена. Если нужно удалить или переименовать файл, до завершения программы, необходимо закрыть поток методом close().
0
Ссылка
У меня была такая же проблема, и дело тут не в других потоках - проверял, все прочие потоки закрыты и т.д. Не знаю, как решить по-нормальному, но вот вариант который сработал у меня(выглядит конечно уродски, но что делать):

File f = new File("/path/to/file");

int limit = 20; // На всякий случай будем пробовать удалить только 5 секунд, чтоб не зациклить
while(!f.delete() && limit > 0){
synchronized(this){
try {
this.wait(250); // Ждем 250 миллисекунд
} catch (InterruptedException e) {
e.printStackTrace();
}
}
limit--;
}
0
Ссылка
Судя по всему это баг в Java. Вот несколько более элегантное решение. Хотя зачастую использование System.gc() - плохая идея, тут он необходим:

finally
{
try
{
in.close();
in = null;
out.flush();
out.close();
out = null;
System.gc();
}
catch (IOException e)
{
logger.error(e.getMessage());
e.printStackTrace();
}
}
Для того, чтоб отвечать на вопросы или зарегистрируйтесь.
ИТ-цитата
"Когда кажется, что все уже работает, все объединено в систему - вам еще осталось работы на четыре месяца."
Чарльз Портман