java – 使用Play 2.1导出csv文件

我想允许客户端下载包含ResultSet数据的csv文件.

我正在使用
java API(PLAY!2.1).

我的解决方案有效但在ResultSet包含大量数据时不可用.

在我的控制器中:

ResultSet rs = st.executeQuery(sql);
String filename = "";
filename = createCSV(rs);.
response().setContentType("text/csv");
response().setHeader("Content-disposition","attachment; filename="+"export.csv");
return ok(new java.io.File("D:\\UTILIS~1\\user\\AppData\\Local\\Temp\\"+filename));

createCSV方法:

public static String createCSV(ResultSet _resultSet) {
    String filename = "";
    try{
        ResultSetMetaData meta = _resultSet.getMetaData();

        // CSV file creation 
        File tempDir = new File(System.getProperty("java.io.tmpdir"));
        System.out.println(System.getProperty("java.io.tmpdir"));
        File tempFile = File.createTempFile("test", ".csv", tempDir);
        filename = tempFile.getName();
        FileWriter fileWriter = new FileWriter(tempFile, true);
        System.out.println(tempFile.getAbsolutePath());
        BufferedWriter bw = new BufferedWriter(fileWriter);

        for(int i = 1; i <= meta.getColumnCount(); i++)
        {
            String columnLabel = meta.getColumnName(i);
            bw.write(columnLabel + "|");
        }
        bw.write("\r\n");
        while(_resultSet.next())
        {
            for(int i = 1, count = meta.getColumnCount(); i <= count; i++){
                if (_resultSet.getObject(i) == null)
                    bw.write("null|");
                else
                    bw.write(_resultSet.getObject(i).toString() + "|");
            }
            bw.write("\r\n");
        }
        bw.close();
        tempFile.deleteOnExit();
    } catch(Exception e){
        e.printStackTrace();
    } 
    return filename;
}

为了节省内存,我如何写入文件并使用流将其发送给用户.

我想我需要使用Chunks,但我不知道该怎么做.

任何样品,提示?

最佳答案 您可以在文档中找到分块响应的示例:

http://www.playframework.com/documentation/2.1.1/JavaStream

您可以在生成时发送csv内容.

点赞