Java servlet和IO:创建文件但不保存到磁盘并将其发送给用户

13

希望可以帮我解决文件创建/响应问题。 我知道如何创建并保存文件。我知道如何通过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);

3
不要将数据保存到文件中,再读取文件并传输字节,而是直接去掉中间步骤——在不先保存到文件的情况下将字节发送给客户端。 - Deco
1
谢谢Deco。我觉得我的问题没有表达清楚。你的评论正是我想要做的,但我不知道如何实现。 - LatinCanuck
1个回答

15

您不需要保存文件,只需使用ByteArray流即可,尝试类似这样的方法:

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

或者更简单地,只需执行以下操作:

stream.write(text.getBytes());

正如cHao所建议的那样,使用text.getBytes("UTF-8")或类似的方法指定除系统默认以外的字符集。可在Charset API文档中获取可用字符集的列表。


2
当然,可以通过指定编码方式来获取字节流,例如text.getBytes("UTF-8") - cHao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接