2011-12-21 3 views
4

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

Но мне нужно создать файл, не сохраняя его на диске, а затем отправить этот файл через 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); 
+3

Вместо сохранения данных в файл, а затем чтения файла и передачи байтов, просто вырезать средний человек - отправьте байты клиенту, не сохраняя их сначала. – Deco

+0

Спасибо Deco. Я думаю, что мой вопрос не очень хорошо спросил. Ваш комментарий именно то, что я хотел сделать, но я не знал, как это сделать. – LatinCanuck

ответ

11

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

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

Или, еще проще, просто сделать:

stream.write(text.getBytes());

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

+2

Задание кодировки, конечно ... 'text.getBytes (« UTF-8 »)', например. – cHao

+0

Ваш ответ отлично поработал. Спасибо, добрый сэр! – LatinCanuck

 Смежные вопросы

  • Нет связанных вопросов^_^