gpt4 book ai didi

java - 写入 CSV 文件,然后在 Appengine (Java) 中将其压缩

转载 作者:搜寻专家 更新时间:2023-11-01 01:19:08 25 4
gpt4 key购买 nike

我目前正在 google appengine 上用 Java 完成一个项目。

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

我想写数据导出成几个csv文件,然后压缩,让用户下载。

如何在不使用任何文件类的情况下执行此操作?我在文件处理方面不是很有经验,所以我希望你们能给我建议。

谢谢。

最佳答案

您可以创建一个 zip 文件并在用户下载时添加到其中。如果您使用的是 servlet,这是直截了当的:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// ..... process request

// ..... then respond
response.setContentType("application/zip");
response.setStatus(HttpServletResponse.SC_OK);

// note : intentionally no content-length set, automatic chunked transfer if stream is larger than the internal buffer of the response
ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream());

byte[] buffer = new byte[1024 * 32];
try {
// case1: already have input stream, typically ByteArrayInputStream from a byte[] full of previoiusly prepared csv data

InputStream in = new BufferedInputStream(getMyFirstInputStream());
try {
zipOut.putNextEntry(new ZipEntry("FirstName"));

int length;
while((length = in.read(buffer)) != -1) {
zipOut.write(buffer, 0, length);
}

zipOut.closeEntry();
} finally {
in.close();
}

// case 2: write directly to output stream, i.e. you have your raw data but need to create csv representation

zipOut.putNextEntry(new ZipEntry("SecondName"));

// example setup, key is to use the below outputstream 'zipOut' write methods
Object mySerializer = new MySerializer(); // i.e. csv-writer
Object myData = getMyData(); // the data to be processed by the serializer in order to make a csv file

mySerizalier.setOutput(zipOut);

// write whatever you have to the zipOut
mySerializer.write(myData);

zipOut.closeEntry();

// repeat for the next file.. or make for-loop

}
} finally {
zipOut.close();
}
}

除非您有内存限制,否则没有理由将您的数据存储在文件中。文件为您提供 InputStream 和 OutputStream,它们在内存中都有等效项。

请注意,创建一个 csv 写入器通常意味着执行类似 this 的操作,重点是获取一段数据(数组列表或映射,无论您拥有什么)并将其放入 byte[] 部分。使用 DataOutputStream(如果您愿意,可以自己制作)或 OutputStreamWriter 等工具将 byte[] 部分附加到 OutputStream。

关于java - 写入 CSV 文件,然后在 Appengine (Java) 中将其压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5128941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com