[英]Export to CSV JSF and PrimeFaces
我正在尝试下载在运行时创建的CSV文件。 此链接对excel有用,我需要对CSV做同样的事情。 HSSFWorkbook
用于excel,但我正在使用FileWriter
CSV。 我需要一行而不是workbook.write(externalContext.getResponseOutputStream());
我不能使用writer.write(externalContext.getResponseOutputStream());
writer是FileWriter
变量,不接受outputStream作为参数。
在我看来,您在这里有两个问题:
如果您不想写入文件,则不需要FileWriter
您需要为用例选择Writer抽象类的正确实现(在这里,您要选择一个写入OutputStream
,而不是File
)。
您正在尝试像HSSFWorkbook#write(java.io.OutputStream)
一样使用Writer#write(...)
HSSFWorkbook#write(java.io.OutputStream)
,但是它们根本不会做相同的事情。 在HSSFWorkbook中,write方法将工作簿的内容写入到某些OutputStream中。 参数告诉方法要在哪里写。 在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();
}
您可以使用的完整工作副本;
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.