1

我目前正在谷歌 appengine 上用 Java 完成一个项目。我有超过 2000 条记录

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

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

我如何在不使用任何 File 类的情况下做到这一点?我在文件处理方面不是很有经验,所以我希望你们能给我建议。

谢谢。

4

3 回答 3

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 Servlet的更多信息

有关内容处置的更多信息

于 2012-12-10T19:05:27.557 回答
1

您可以使用字节数组、字符串和流将数据存储在内存中。例如,

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() 作为流提供。这里给出了一些例子:实现一个简单的文件下载 servlet

于 2012-12-10T19:05:15.520 回答
-1

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

于 2012-12-11T00:13:14.750 回答