2015-11-07 69 views
0

我即将使用jsf Primefaces下载按钮来下载csv文件。 该文件不存在,并且无法使用导出实用程序,因为我需要在运行时构建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文件,而不实际上在文件系统中保存(临时)文件。

我想用流添加我的数据,所以我可以很容易地追加和操作String s,byte s和image文件。

任何想法?也许是一个Stringbuffer?

在此先感谢。

+0

向下选民欢迎陈述他们的理由。这对我来说似乎是一个有效的问题。 – XenoRo

回答

0

我不认为你可以“创建文件而不创建文件”

使用StringStringBufferStringBuilder,或其他变量有该文件的内容在内存中。

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

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序列化为真实的文件,可以使用适当的书写器完成。