导出到CSV JSF和PrimeFaces

时间:2014-08-06 08:36:56

标签: java excel jsf csv primefaces

Export to Excel JSF and PrimeFaces

我正在尝试下载在运行时创建的CSV文件。此链接对excel非常有用,我需要对CSV执行相同操作。 HSSFWorkbook用于Excel,但我使用FileWriter表示CSV。我需要使用一行而不是workbook.write(externalContext.getResponseOutputStream());我不能使用writer.write(externalContext.getResponseOutputStream()); writer是FileWriter变量,并且不接受outputStream作为参数。

2 个答案:

答案 0 :(得分:2)

在我看来,你有两个问题:

  • 如果您不想写入文件,则不应该有FileWriter - 您需要为您的用例选择正确的Writer抽象类实现(在这里,您需要选择写入OutputStream而不是File)的那个。

  • 您尝试使用Writer#write(...) HSSFWorkbook#write(java.io.OutputStream),但他们根本不会做同样的事情。在HSSFWorkbook中,write方法将工作簿的内容写入某个OutputStream;该参数告诉您要编写的方法 where 。在Writer中,write方法将一些东西写入writer本身;该参数告诉方法你想写什么

根据您从HSSFWorkbook写入的链接,以类似方式编写CSV可能如下所示:

public void getReportData() throws IOException {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    ExternalContext externalContext = facesContext.getExternalContext();
    externalContext.setResponseContentType("text/csv");
    externalContext.setResponseHeader("Content-Disposition", "attachment; filename=\"my.csv\"");

    OutputStream out = externalContext.getResponseOutputStream());
    Writer writer = new OutputStreamWriter(out);

    // Let's write the CSV content
    try {
        writer.write("Line number,Col 1,Col 2");
        writer.write("1,Value 1,Value 2");
        writer.write("2,Value 3,Value4");
    } finally {
        if (writer != null {
            // Closing the writer also flushes it, and does the same to the underlying OutputStream
            writer.close();
        }
    }

    facesContext.responseComplete();
}

答案 1 :(得分:0)

您可以使用的整个工作副本;

String csvFileName = "mydoc.csv";

    FileWriter writer = new FileWriter(csvFileName);
    int columnNameSize = activeTab.getColumnNames().size();

    for (int i = 0; i < columnNameSize; i++) {
        writer.append(activeTab.getColumnNames().get(i));
        if (i != (columnNameSize - 1)) {
            if (delimiterType.equalsIgnoreCase(TAB_DELIMITER_VALUE_NAME)) {
                writer.append('\t');
            } else {
                writer.append(delimiterType);
            }
        }
    }
    writer.append("\n");

    for (DBData[] temp : activeTab.getTabularData()) {
        int tempSize = temp.length;
        for (int k = 0; k < tempSize; k++) {
            writer.append(temp[k].toFullString());
            if (k != (tempSize - 1)) {
                if (delimiterType.equalsIgnoreCase(TAB_DELIMITER_VALUE_NAME)) {
                    writer.append('\t');
                } else {
                    writer.append(delimiterType);
                }
            }
        }
        writer.append("\n");
    }

    writer.flush();
    writer.close();

    InputStream stream = new BufferedInputStream(new FileInputStream(csvFileName));
    exportFile = new DefaultStreamedContent(stream, "application/csv", csvFileName);