导出为CSV JSF和PrimeFaces
导出到Excel JSF和PrimeFaces
我正在尝试下载在运行时创build的CSV文件。 这个链接是有用的Excel和我需要做同样的CSV。 HSSFWorkbook
用于Excel中,但我使用FileWriter
的CSV。 我需要一行来使用,而不是workbook.write(externalContext.getResponseOutputStream());
我不能使用writer.write(externalContext.getResponseOutputStream());
FileWriter
是FileWriter
variables,不接受outputStream作为参数。
在我看来,你在这里有两个问题:
-
如果您不想写入文件,则不应该有
FileWriter
– 您需要为您的用例selectWriter抽象类的正确实现(这里,您要select写入OutputStream
,而不是一个File
)。 -
您正在尝试使用
Writer#write(...)
如HSSFWorkbook#write(java.io.OutputStream)
,但是它们根本不会做同样的事情。 在HSSFWorkbook中,写入方法将工作簿的内容写入某个OutputStream; 该参数告诉您要写入的方法。 在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(); }
您可能使用的整个工作副本;
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);