【问题标题】:Downloading a CSV File in Browser by using Java使用 Java 在浏览器中下载 CSV 文件
【发布时间】:2013-08-07 10:01:39
【问题描述】:

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

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

假设“文件”(文件类型)是我正在使用的 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 作为参数,并且不可能将 File 传递给它们。

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

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

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

【问题讨论】:

    标签: java servlets csv


    【解决方案1】:

    您可以逐行读取CSV文件,并将该行写在HttpSerlvetResponse的Writer上:

    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();
        }
    }
    
    }
    

    如果您同时使用Reader 和Writer,则将处理字符编码(例如,CSV 文件是具有类似 UTF-8 编码的文本文件)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 1970-01-01
      • 2014-10-27
      • 2014-07-16
      • 1970-01-01
      • 2022-06-16
      • 2018-05-21
      相关资源
      最近更新 更多