2016-03-09 6 views
0

Чтобы разрешить образы в отчете Jasper с помощью REPORT_FILE_RESOLVER, я создаю временный файл и копирую с ним из inputStream.Удаление файла работает только в первый раз

 final File tempFile = File.createTempFile("aaa", ".tmp"); 
     IOUtils.copy(resource.getInputStream(), new FileOutputStream(tempFile)); 

После доклада яшма экспортируется, я пытался удалить временный файл, как показано ниже:

final boolean deleteIfExists = Files.deleteIfExists(Paths.get(tempfile.getPath())); 
// file.delete(); 

Но удаление файла является успешным только в первый раз, если я использую Files.deleteIfExists(Paths.get(tempfile.getPath()))

ли не успех для file.delete(). Я реализую веб-приложение, и эта функция может быть вызвана так много раз .... Последнее время удаления, просто показывая файл используется другим процессом ...

Не знаю, почему ...

+0

ли вы закрыть поток? –

+0

@AlexK вы правы. Fogot закрыть fileOutputStream. Pls положил в качестве ответа. Спасибо вам. – swemon

+0

Добро пожаловать :) –

ответ

1

Попробуйте закрыть OutputStream.

Нечто подобное (с помощью интерфейс AutoCloseable и "Try-с-ресурсов" заявление)

final File tempFile = File.createTempFile("aaa", ".tmp"); 
    try (OutputStream outputStream = new FileOutputStream(tempFile)) { 
     IOUtils.copy(resource.getInputStream(), outputStream); 
     // do something 
    } 
Смежные вопросы