Java сервлет и ввод-вывод: создать файл без сохранения на диск и отправки его пользователю - PullRequest
6 голосов
/ 22 декабря 2011

Я надеюсь, что поможет мне с вопросом о создании файла / ответе. Я знаю, как создать и сохранить файл. Я знаю, как отправить этот файл обратно пользователю через ServletOutputStream.

Но мне нужно создать файл, не сохраняя его на диске, а затем отправить этот файл через ServletOutputStream.

Код выше объясняет части, которые у меня есть. Любая помощь приветствуется. Заранее спасибо.

// This Creates a file
//
String   text = "These days run away like horses over the hill";
File     file = new File("MyFile.txt");
Writer writer = new BufferedWriter(new FileWriter(file));
writer.write(text);
writer.close();

// Missing link goes here
//

// This sends file to browser
//
InputStream inputStream = null;
inputStream = new FileInputStream("C:\\MyFile.txt");

byte[] buffer = new byte[8192];
ByteArrayOutputStream baos = new ByteArrayOutputStream();

int bytesRead;
while (  (bytesRead = inputStream.read(buffer)) != -1)
   baos.write(buffer, 0, bytesRead);

response.setContentType("text/html");
response.addHeader("Content-Disposition", "attachment; filename=Invoice.txt");

byte[] outBuf = baos.toByteArray();
stream = response.getOutputStream();
stream.write(outBuf);

1 Ответ

13 голосов
/ 22 декабря 2011

Вам не нужно сохранять файл, просто используйте поток ByteArray, попробуйте что-то вроде этого:

inputStream = new ByteArrayInputStream(text.getBytes());

Или, что еще проще, просто выполните:

stream.write(text.getBytes());

Как подсказывает cHao , используйте text.getBytes("UTF-8") или что-то подобное, чтобы указать кодировку, отличную от системной по умолчанию.Список доступных кодировок доступен в документации API для Charset .

...