При запуске приложения я создаю временную папку:
public static File createTempDir(String name) throws IOException {
File tempDir = File.createTempFile(name, "");
if (!(tempDir.delete())) {
throw new IOException("could not delete" + tempDir.getAbsolutePath());
}
if (!(tempDir.mkdir())) {
throw new IOException("could not create" + tempDir.getAbsolutePath());
}
tempDir.deleteOnExit();
return tempDir;
}
Во время сеанса пользователь может загрузить файл. В результате старый временный каталог удаляется, а новый создается на основе идентификатора загруженного файла.
Во время загрузки, когда старый временный каталог удаляется, я иногда получаю:
java.io.IOException: Невозможно удалить файл:
Вот как удаляется старая временная папка:
public void cleanup(String tmpPath) {
File tmpFolder = new File(tmpPath);
if (tmpFolder != null && tmpFolder.isDirectory()) {
try {
FileUtils.deleteDirectory(file);
} catch (IOException e) {
e.printStackTrace();
}
}
}
где FileUtils: org.apache.commons.io.FileUtils. Обычно содержимое временной папки:
mytempfolder_uuid
| -> mysubfolder
| -> myImage.jpg
И ошибка:
java.io.IOException: Невозможно удалить файл: C: \ Users \ xxx \ AppData \ Local \ Temp \ mytempfolder_uuid \ mysubfolder \ myImage.jpg
Я попытался отладить приложение и перед выполнением операции удаления проверил, что вышеупомянутое изображение действительно находится в указанной папке.
Самое неприятное, что это случается иногда. Я позаботился о том, чтобы в других приложениях папка / файлы во временной папке не открывалась. Есть идеи / предложения?