【发布时间】:2012-12-10 18:56:31
【问题描述】:
我目前正在谷歌 appengine 上开发一个用 Java 完成的项目。我有超过 2000 条记录
Appengine 不允许存储文件,因此无法使用任何磁盘上的表示对象。其中一些包括 File 类。
我想写数据并导出到几个csv文件,用户下载。
如何在不使用任何 File 类的情况下做到这一点?文件处理经验不是很丰富,希望大家多多指教。
谢谢。
【问题讨论】:
标签: java google-app-engine csv
我目前正在谷歌 appengine 上开发一个用 Java 完成的项目。我有超过 2000 条记录
Appengine 不允许存储文件,因此无法使用任何磁盘上的表示对象。其中一些包括 File 类。
我想写数据并导出到几个csv文件,用户下载。
如何在不使用任何 File 类的情况下做到这一点?文件处理经验不是很丰富,希望大家多多指教。
谢谢。
【问题讨论】:
标签: java google-app-engine csv
只需使用 StringBuffer 在内存中生成 csv,然后使用 StringBuffer.toString().getBytes() 获取字节数组,然后将其发送到您的输出流。
例如,如果在 GAE 中使用 servlet:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
StringBuffer buffer = new StringBuffer();
buffer.append("header1, header2, header3\n");
buffer.append("row1column1, row1column2, row1column3\n");
buffer.append("row2column1, row2column2, row2column3\n");
// Add more CSV data to the buffer
byte[] bytes = buffer.toString().getBytes();
// This will suggest a filename for the browser to use
resp.addHeader("Content-Disposition", "attachment; filename=\"myFile.csv\"");
resp.getOutputStream().write(bytes, 0, bytes.length);
}
更多关于GAE Servlets的信息
更多关于Content-Disposition的信息
【讨论】:
您可以使用字节数组、字符串和流将数据存储在内存中。例如,
ByteArrayOutputStream csv = new ByteArrayOutputStream();
PrintStream printer = new PrintStream(csv);
printer.println("a;b;c");
printer.println("1;2;3");
printer.close();
csv.close();
然后在您的 Servlet 中,您可以将 csv.toByteArray() 作为流提供。这里给出了一些例子:Implementing a simple file download servlet。
【讨论】:
您可以在 Google App Engine 中使用 OpenCSV 库。
【讨论】: