1

私は現在、Java、GoogleAppEngineで行われるプロジェクトに取り組んでいます。私は2000以上の記録を持っています

Appengineではファイルを保存できないため、ディスク上の表現オブジェクトは使用できません。これらの一部には、Fileクラスが含まれます。

データを書き込んで、それをいくつかのcsvファイルにエクスポートし、ユーザーがダウンロードしたいと思います。

Fileクラスを使用せずにこれを行うにはどうすればよいですか?私はファイル処理の経験があまりないので、皆さんからアドバイスをいただければ幸いです。

ありがとう。

4

3 に答える 3

3

StringBufferを使用してメモリ内にcsvを生成し、を使用StringBuffer.toString().getBytes()してバイト配列を取得します。これを出力ストリームに送信できます。

たとえば、GAEでサーブレットを使用する場合:

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サーブレットに関する詳細情報

Content-Dispositionに関する詳細情報

于 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();

次に、サーブレットでcsv.toByteArray()をストリームとして提供できます。ここにいくつかの例を示します。単純なファイルダウンロードサーブレットの実装

于 2012-12-10T19:05:15.520 に答える