如何使用java在谷歌应用程序中编写csv文件

时间:2012-12-10 18:56:32

标签: java google-app-engine csv

我目前正在开发一个用Java在google appengine上完成的项目。我有超过2000条记录

Appengine不允许存储文件,因此无法使用任何磁盘表示对象。其中一些包括File类。

我想写数据并将其导出到几个csv文件,用户可以下载它。

如果不使用任何文件类,我怎么能这样做?我在文件处理方面不是很有经验,所以我希望你们能告诉我。

感谢。

3 个答案:

答案 0 :(得分:3)

只需使用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

的更多信息

答案 1 :(得分:1)

您可以使用字节数组,stings和stream将数据存储在内存中。例如,

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

答案 2 :(得分:-1)

您可以在Google App Engine中使用OpenCSV库。