加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何使用java servlet下载csv文件?

发布时间:2020-12-15 08:34:23 所属栏目:Java 来源:网络整理
导读:我有示例 java servlet文件.但它导出到本地文件.但是我需要在点击下载按钮时下载csv文件? 这里是servlet类,我需要在这里添加什么代码来下载csv文件? import java.io.*;import java.net.*;import javax.servlet.*;import javax.servlet.http.*;public class
我有示例 java servlet文件.但它导出到本地文件.但是我需要在点击下载按钮时下载csv文件?

这里是servlet类,我需要在这里添加什么代码来下载csv文件?

import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class CsvFile extends HttpServlet { 
public void doGet (HttpServletRequest request,HttpServletResponse response) 
throws ServletException,IOException  {
try
{
      PrintWriter out = response.getWriter();
      String filename = "c:csvmyfile.csv";
      FileWriter fw = new FileWriter(filename);

      fw.append("Employee Code");
      fw.append(',');
      fw.append("Employee Name");
      fw.append(',');
      fw.append("Employee Address");
      fw.append(',');
      fw.append("Employee Phone");
      fw.append(',');
      fw.append("Employee ZipCode");
      fw.append('n');

      fw.append("E1");
      fw.append(',');
      fw.append("Vineet");
      fw.append(',');
      fw.append("Delhi");
      fw.append(',');
      fw.append("224277488");
      fw.append(',');
      fw.append("110085");
      fw.append('n');

      fw.append("E2");
      fw.append(',');
      fw.append("Amar");
      fw.append(',');
      fw.append("257765758");
      fw.append(',');
      fw.append("110001");
      fw.append('n');

      fw.append("E3");
      fw.append(',');
      fw.append("Amit");
      fw.append(',');
      fw.append("257685858");
      fw.append(',');
      fw.append("110005");
      fw.append('n');

      fw.append("E4");
      fw.append(',');
      fw.append("Suman");
      fw.append(',');
      fw.append("266447678");
      fw.append(',');
      fw.append("110081");
      fw.append('n');


      fw.flush();
      fw.close();
      out.println("<b>Csv file Successfully created.</b>");

} 
catch (Exception ex) {
ex.printStackTrace ();
}
}
}

解决方法

您正在写入文件而不是HTTP响应.

>您需要将CSV写入HttpServletResponse#getWriter().
>您需要将Content-Disposition标头设置为附件以强制Web浏览器中的“另存为”对话框,最终还有文件名属性.有一个(主要?)警告:MSIE浏览器不会在“另存为”对话框中使用指定的文件名作为实际文件名,而是使用URL的pathinfo的最后一部分.
>您需要将Content-Type标头设置为text / csv,以指示webbrowser它是什么类型的文件,以便在最终用户选择Open而不是Save时找到正确的关联应用程序.通常,在Windows机器上,MS Excel默认与该内容类型相关联.

要实现这些要求,您需要创建一个CsvServlet,它在doGet()方法中基本执行以下操作.

String filename = request.getPathInfo().substring(1); // get rid of leading `/`
response.setHeader("Content-Type","text/csv");
response.setHeader("Content-Disposition","attachment; filename="" + filename + """);
PrintWriter writer = response.getWriter();
writer.append("CSV content");
// ...

就这样. flush()和close()顺便说一下并不是绝对必要的,但是如果你想避免请求链中的其他内容正在向响应体添加一些东西(这应该严格不会发生,但它只会发出) IllegalStateExceptions和/或IOExceptions进入服务器日志而不是错误的响应.

然后,使用/ csv / *的url-pattern映射web.xml中的CsvServlet,并在http://example.com/context/csv/filename.csv之前调用它.

也就是说,你可能更像是一个真正的CSV格式化程序/编写器,可以很好地编写String [] []或List< List< String>>到OutputStream或Writer,特此尊重CSV格式规则.字段值本身可能包含引号或逗号,然后CSV格式会中断.

也可以看看:

> JSP page without HTML code for exporting data to Excel Sheet

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读