Java 如何在不使用OpenCsv写入的情况下下载csv文件

Java 如何在不使用OpenCsv写入的情况下下载csv文件,java,servlets,csv,Java,Servlets,Csv,我正在使用OpenCSVAPI,现在我遇到了一些问题。这是我的代码 protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWrit

我正在使用OpenCSVAPI,现在我遇到了一些问题。这是我的代码

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        try {
            List<UserRegData> userRegDataList = new ArrayList<UserRegData>();
            HttpSession session = request.getSession();
            userRegDataList = (List<UserRegData>) session.getAttribute("referralData");
            List<String[]> dataToWrite = new ArrayList<String[]>();
            String csv = "E:\\carewave_backup\\csv\\UserReferral.csv";
            CSVWriter writer = new CSVWriter(new FileWriter(csv));

            for (UserRegData obj : userRegDataList) {
                dataToWrite.add(new String[]{obj.getReferred_by_name(), obj.getInvitee_name(), obj.getInvitee_email(), obj.getInvitee_date(), obj.getIsInviteeRegistered(), obj.getDate_of_invitee_registered()});
            }
            writer.writeAll(dataToWrite);
            writer.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            out.close();
        }
    }
protectedvoidprocessrequest(HttpServletRequest请求,HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“text/html;charset=UTF-8”);
PrintWriter out=response.getWriter();
试一试{
List userRegDataList=new ArrayList();
HttpSession session=request.getSession();
userRegDataList=(List)session.getAttribute(“referralData”);
List dataToWrite=new ArrayList();
String csv=“E:\\carewave\u backup\\csv\\userreference.csv”;
CSVWriter writer=新CSVWriter(新文件编写器(csv));
for(UserRegData对象:userRegDataList){
dataToWrite.add(新字符串[]{obj.getReferenced_by_name(),obj.getInvitee_name(),obj.getInvitee_email(),obj.getInvitee_date(),obj.getIsInviteRegistered(),obj.getDate_of_invitee_registered());
}
writer.writeAll(dataToWrite);
writer.close();
}捕获(例外情况除外){
例如printStackTrace();
}最后{
out.close();
}
}

这个servlet基本上是从会话中检索列表并将其写入csv文件。这个servlet是在用户单击下载csv按钮后触发的。现在我需要的是,浏览器应该提供一个下载对话框。是否可以以csv格式下载,而不先将其写入文件?

我假设您正在询问如何将服务器上的输出直接流式传输到客户端,而不先将其写入服务器上的临时文件

您不需要先将数据写入文件

  • 将响应内容类型设置为
    text/csv
  • 对响应对象调用
    getOutputStream()
  • dataToWrite
    的内容作为单独的行写入输出流

  • 不需要磁盘文件。

    我假定您询问的是如何将服务器上的输出直接流式传输到客户端,而不首先将其写入服务器上的临时文件

    您不需要先将数据写入文件

  • 将响应内容类型设置为
    text/csv
  • 对响应对象调用
    getOutputStream()
  • dataToWrite
    的内容作为单独的行写入输出流

  • 不需要磁盘文件。

    为什么您认为必须将其写入服务器上的文件?将内容类型设置为
    text/csv
    ,而不是
    writer.writeAll
    将行直接写入响应。为什么您认为必须将其写入服务器上的文件?而不是
    writer.writeAll
    在将内容类型设置为
    text/csv
    后将行直接写入响应。