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

Create a csv or simple text file using only streams

我要使用 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,而无需在文件系统中实际保存(临时)文件。

我想使用流附加我的数据,这样我就可以轻松地附加和操作 Strings、bytes 和 image 文件。

有什么想法吗?也许是一个字符串缓冲区?

提前致谢。

我认为你做不到"create a file without creating a file"

使用 StringStringBufferStringBuilder 或其他 变量 内存中文件的内容

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

据我了解你的问题,以下答案"maybe"解决了你的问题:

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序列化成一个真正的文件,你可以通过合适的编写器来实现。