java - 在 java 中从服务器下载文件后无法打开 Excel .xlsx 文件

标签 java excel jakarta-ee servlets

<分区>

这是我的示例代码。我正在使用 eclipse,tomcat 服务器。浏览器作为 IE9。

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

        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");


        ServletContext context = request.getServletContext();
        @SuppressWarnings("unchecked")
        List<Student> students = (List<Student>) context.getAttribute("students");
        PrintWriter out = response.getWriter();
        for(Student student:students){
            out.println(student.getId()+"\t"+student.getName());
        }
        out.close();

    }

我正在获取学生名单。但是当我打开下载的文件时,文件出现错误,指出文件格式或扩展名无效。我下载的文件是 .xlsx 。

最佳答案

与其说是 .xlsx 文件,不如说是 CSV 或制表符分隔值文本文件。伪装成Excel文件;是的,然后 Excel 可以正确打开它,

尝试用记事本阅读。您也可以使用记事本制作一个 .xlsx 文件来检查该技巧是否有效。

以下尝试:

  • .xls
  • Windows \r\n (CR+LF) 行结尾。也许服务器是 Linux 并提供 \n (LF)。
  • 定义的编码。

然后

    response.setEncoding("UTF-8");
    response.setContentType("application/vnd.ms-excel");

    ServletContext context = request.getServletContext();
    @SuppressWarnings("unchecked")
    List<Student> students = (List<Student>) context.getAttribute("students");
    PrintWriter out = response.getWriter();
    out.print("\uFEFF"); // UTF-8 BOM, redundant and ugly
    for(Student student:students){
        out.printf("%s\t%s\r\n", student.getId(), student.getName());
    }
    //out.close();

关于java - 在 java 中从服务器下载文件后无法打开 Excel .xlsx 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25782961/

相关文章:

java - 创建链表的数组列表

java - 在本地机器上调用特定网页时触发 Java 代码

java - 从 JBoss EAP 6 中的应用程序访问 Oracle 10g 时出错

css - 如何使用 Excel 数据为图形(顶点和边)着色?

java - 文件路径(JAVA EE)

java - 如何使用 LayoutInflater 动态添加 editText 和按钮并为它们设置唯一的 id?

excel - 如何遍历字符串以匹配日期

excel - 将 Excel 作为 csv 导出到另一个位置时出现问题,vba - 窗口 "blacks out"

java - 在 hibernate 中插入实体问题

spring - 配置 Spring 以忽略使用 @Inject 注释的依赖项