Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaServlet获取下载csv文件?_Java_Servlets_Csv - Fatal编程技术网

如何使用JavaServlet获取下载csv文件?

如何使用JavaServlet获取下载csv文件?,java,servlets,csv,Java,Servlets,Csv,我有一个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 (HttpServ

我有一个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:\\csv\\myfile.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("Delhi");
      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("Delhi");
      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("Delhi");
      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 ();
}
}
}
import java.io.*;
导入java.net。*;
导入javax.servlet.*;
导入javax.servlet.http.*;
公共类CsvFile扩展HttpServlet{
public void doGet(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
尝试
{
PrintWriter out=response.getWriter();
String filename=“c:\\csv\\myfile.csv”;
FileWriter fw=新的FileWriter(文件名);
fw.追加(“员工代码”);
fw.append(',');
fw.追加(“员工姓名”);
fw.append(',');
fw.追加(“员工地址”);
fw.append(',');
fw.附加(“员工电话”);
fw.append(',');
fw.append(“员工ZipCode”);
fw.append('\n');
fw.附加(“E1”);
fw.append(',');
fw.附加(“葡萄园”);
fw.append(',');
fw.附加(“德里”);
fw.append(',');
fw.追加(“224277488”);
fw.append(',');
fw.追加(“110085”);
fw.append('\n');
fw.附加(“E2”);
fw.append(',');
fw.追加(“阿马尔”);
fw.append(',');
fw.附加(“德里”);
fw.append(',');
fw.追加(“257765758”);
fw.append(',');
fw.追加(“110001”);
fw.append('\n');
fw.附加(“E3”);
fw.append(',');
fw.附加(“Amit”);
fw.append(',');
fw.附加(“德里”);
fw.append(',');
fw.追加(“257685858”);
fw.append(',');
fw.追加(“110005”);
fw.append('\n');
fw.附加(“E4”);
fw.append(',');
fw.追加(“苏曼”);
fw.append(',');
fw.附加(“德里”);
fw.append(',');
fw.追加(“266447678”);
fw.append(',');
fw.追加(“110081”);
fw.append('\n');
fw.flush();
fw.close();
println(“已成功创建Csv文件”);
} 
捕获(例外情况除外){
例如printStackTrace();
}
}
}

将内容类型设置为
应用程序/vnd.ms excel
,并将响应标题设置为内容处置
response.setHeader(“内容处置”、“附件;文件名=\”myfile.csv\”)

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

  • 您需要将CSV写入
  • 您需要将
    Content-Disposition
    标题设置为
    attachment
    ,以强制webbrowser中的另存为对话框,并最终添加
    filename
    属性。有一个(主要?)警告:MSIE浏览器不会在“另存为”对话框中将指定的
    文件名
    用作实际文件名,而是使用URL路径信息的最后一部分
  • 您需要将
    内容类型
    标题设置为
    文本/csv
    ,以指示Web浏览器它是什么类型的文件,以便当最终用户选择打开而不是保存时,它可以找到正确的关联应用程序。通常,在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()
并不是绝对必要的,但如果您希望避免请求链中的其他内容在响应体中附加某些内容,则它们非常有用(严格来说,这不应该发生,但它只会将
IllegalStateException
s和/或
IOException
s发送到服务器日志中,而不会使响应格式错误

然后,将
web.xml
中的
CsvServlet
映射为
/csv/*
url模式
,并通过调用它


也就是说,您可能更喜欢一个真正的CSV格式化程序/编写器,它可以将
字符串[][]
列表
很好地写入
输出流
编写器
,从而遵守CSV格式规则。如果字段值本身包含引号或逗号,CSV格式可能会中断

另见:

您是否正在尝试导入Excel?如何调用CsvServlet?web.xml条目的具体外观如何?