仅使用流创建csv或简单文本文件

时间:2015-11-07 12:23:53

标签: java csv inputstream

我即将使用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,byteimage个文件。

有什么想法吗?也许是Stringbuffer?

提前致谢。

2 个答案:

答案 0 :(得分:0)

我不认为您可以"创建文件而无需创建文件"

使用StringStringBufferStringBuilder或其他 变量 让文件 内容 在内存中。

编辑: 显然,还有内存流(?):ByteArrayInputStreamByteArrayOutputStream

答案 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序列化为真实文件,可以使用相应的编写器进行。