gpt4 book ai didi

java - 使用 Java 在浏览器中下载 CSV 文件

转载 作者:行者123 更新时间:2023-11-30 09:19:08 25 4
gpt4 key购买 nike

我正在尝试在 Web 应用程序上添加一个按钮,单击该按钮会下载一个 CSV 文件(很小,大小只有 4KB 左右)。

我已经制作了按钮并附加了一个监听器。文件也准备好了。我现在唯一需要做的就是创建在单击按钮时下载 csv 文件的实际事件。

假设"file"(属于文件类型)是我正在使用的 csv 文件的名称,并且它已准备就绪,这是我目前使用的方法:

public void downloadCSV(HttpServletRequest _request, HttpServletResponse _response, LogFileDetailCommand cmd) throws Exception {
ServletOutputStream outStream = _response.getOutputStream();
_response.setContentType("text/csv");
_response.setHeader("Content-Disposition", "attachment; filename=data.csv");
}

我意识到我缺少将文件写入 ServletOutputStream 的部分,但这是我坚持的部分。我知道 ServletOutputStream 类扩展了 OutputStream 类(http://docs.oracle.com/javaee/5/api/javax/servlet/ServletOutputStream.html),因此它继承了它的“写入”方法,所以在理想的世界中我想简单地说“outStream.write(file);”,但我可以不要那样做,因为这些“写入”方法只有 byte、byte[] 和 int 作为参数,并且不可能将文件传递给它们。

我应该怎么做才能将文件传递到 outStream 中?

(旁注:我应该在“_response.setContentLength();”中添加这个吗?如果是,我应该在其中添加哪些参数?)

附言我知道在完成 outStream 后我需要刷新和/或关闭它。

最佳答案

您可以逐行读取 CSV 文件,并将该行写入 HttpSerlvetResponseWriter:

public class DownloadCsvServlet extends HttpServlet {

protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {

final File file = new File("/tmp/data.csv");

response.setContentType("text/csv");

response.setHeader("Content-Disposition",
"attachment; filename=" + file.getName());

final BufferedReader br = new BufferedReader(new FileReader(file));
try {
String line;
while ((line = br.readLine()) != null) {
response.getWriter().write(line + "\n");
}
} finally {
br.close();
}
}

}

如果您同时使用 ReaderWriter,将处理字符编码(例如,CSV 文件是编码为 UTF-8 的文本文件)。

此解决方案,因此只有一小部分可能很大的文件在内存中。

关于java - 使用 Java 在浏览器中下载 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18100416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com