Для Java 1.7+ вы можете использовать Files.copy (Path, OutputStream) , например,
HttpServletResponse response = // ...
File toBeCopied = // ...
try (OutputStream out = response.getOutputStream()) {
Path path = toBeCopied.toPath();
Files.copy(path, out);
out.flush();
} catch (IOException e) {
// handle exception
}
Обратите внимание, поскольку вы имеете дело с HttpServletResponse
, это также хорошая идея для установки правильных заголовков ответа. Добавьте следующие строки перед тем, как скопировать фактические данные файла в ответ:
String mimeType = URLConnection.guessContentTypeFromName(toBeCopied.getName());
String contentDisposition = String.format("attachment; filename=%s", toBeCopied.getName());
int fileSize = Long.valueOf(toBeCopied.length()).intValue();
response.setContentType(mimeType);
response.setHeader("Content-Disposition", contentDisposition);
response.setContentLength(fileSize);
Обратите внимание, что важна кодировка имени файла, передаваемого в расположение содержимого, см. этот вопрос .