我即将使用jsf Primefaces下载按钮下载csv文件。 该文件不存在,并且无法使用导出实用程序,因为我需要在运行时构建csv。
这是一项有效的测试尝试:
private StreamedContent file;
/** Getter,setter...*/
public void FileDownloadBean() {
InputStream stream = this.getClass().getResourceAsStream("test.csv");
file = new DefaultStreamedContent(stream, "application/csv", "test.csv");
}
我正在使用Primefaces的事实并不真正算在这里,我想要实现的是构建任何类型的文件,最好是CSV,而不是在文件系统中实际保存(temp)文件。
我想使用流追加我的数据,因此我可以轻松追加和操作String
s,byte
和image
个文件。
有什么想法吗?也许是Stringbuffer?
提前致谢。
答案 0 :(得分:0)
我不认为您可以"创建文件而无需创建文件" 。
使用String
,StringBuffer
,StringBuilder
或其他 变量 让文件 内容 在内存中。
编辑: 显然,还有内存流(?):ByteArrayInputStream
和ByteArrayOutputStream
答案 1 :(得分:0)
据我了解你的问题,以下答案“可能”解决了你的问题:
public class InMemoryStreaming {
private StringBuilder sb = new StringBuilder();
public void FileDownloadBean() throws IOException {
InputStream csvStream = this.getClass().getResourceAsStream("test.csv");
try (BufferedReader br = new BufferedReader(new InputStreamReader(
csvStream))) {
// on every method call the StringBuilder is appended
sb.append(br.lines().collect(
Collectors.joining(System.lineSeparator())));
}
}
}
如果要将StringBuilder
序列化为真实文件,可以使用相应的编写器进行。