我目前正在谷歌 appengine 上用 Java 完成一个项目。我有超过 2000 条记录
Appengine 不允许存储文件,因此无法使用任何磁盘上的表示对象。其中一些包括 File 类。
我想写入数据并将其导出到几个csv文件,用户下载它。
我如何在不使用任何 File 类的情况下做到这一点?我在文件处理方面不是很有经验,所以我希望你们能给我建议。
谢谢。
我目前正在谷歌 appengine 上用 Java 完成一个项目。我有超过 2000 条记录
Appengine 不允许存储文件,因此无法使用任何磁盘上的表示对象。其中一些包括 File 类。
我想写入数据并将其导出到几个csv文件,用户下载它。
我如何在不使用任何 File 类的情况下做到这一点?我在文件处理方面不是很有经验,所以我希望你们能给我建议。
谢谢。
只需使用 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);
}
您可以使用字节数组、字符串和流将数据存储在内存中。例如,
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。
您可以在 Google App Engine中使用OpenCSV库。