《ReaChannel》.read(《ByteBuffer》);
《WriteChannel》.write(《ByteBuffer》);
GSFileOptionsBuilder optionsBuilder = new GSFileOptionsBuilder()そして、テキストからByteBufferインスタンスを作成し、それをwriteで出力しています。
……略……
.setMimeType("binary/octet-stream")
String data = title + "\n\n" + content;これで、バイナリデータを書きだすことができます。テキストよりだいぶ簡単ですね。――続いて読み込み部分を見てみましょう。
ByteBuffer buffer = ByteBuffer.wrap(data.getBytes());
writeChannel.write(buffer);
ByteBuffer buffer = ByteBuffer.allocate(1024);あらかじめByteBufferインスタンスを用意しておき、readでこのインスタンスにバイナリデータを読み込みます。後は、ここからStringを生成して出力するだけですね。
readChannel.read(buffer);
out.println(new String(buffer.array()));これで、保存したバイナリデータからテキストを生成して表示できました。今回はテキストのエンコードなど何も考えていませんから、日本語などは読み込む際に文字化けしてしまいます。しかしまぁ、バイナリデータの読み書きの基本はこれでわかったのではないでしょうか。
※リストが表示されない場合
AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。
package com.tuyano.libro.mygaeapp;
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import javax.servlet.http.*;
import com.google.appengine.api.files.*;
import com.google.appengine.api.files.GSFileOptions.GSFileOptionsBuilder;
@SuppressWarnings("serial")
public class MyGaeAppServlet extends HttpServlet {
public static final String BUCKETNAME = "my_cloud_data";
public static final String FILENAME = "sample.data";
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException {
response.setContentType("text/plain");
request.setCharacterEncoding("utf8");
response.setCharacterEncoding("utf8");
PrintWriter out = response.getWriter();
String filename = "/gs/" + BUCKETNAME + "/" + FILENAME;
FileService fileService = FileServiceFactory.getFileService();
AppEngineFile readableFile = new AppEngineFile(filename);
FileReadChannel readChannel = null;
try {
readChannel = fileService.
openReadChannel(readableFile, true);
ByteBuffer buffer = ByteBuffer.allocate(1024);
readChannel.read(buffer);
out.println(new String(buffer.array()));
} catch(FileNotFoundException e){
out.println("no file...");
} finally {
try {
readChannel.close();
} catch(Exception ex){}
}
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException {
response.setContentType("text/plain");
request.setCharacterEncoding("utf8");
response.setCharacterEncoding("utf8");
String title = request.getParameter("title");
String content = request.getParameter("content");
FileService fileService = FileServiceFactory
.getFileService();
GSFileOptionsBuilder optionsBuilder = new GSFileOptionsBuilder()
.setBucket(BUCKETNAME)
.setKey(FILENAME)
.setMimeType("binary/octet-stream")
.setAcl("public_read");
AppEngineFile file = fileService
.createNewGSFile(optionsBuilder.build());
FileWriteChannel writeChannel = fileService.openWriteChannel(file, true);
String data = title + "\n\n" + content;
ByteBuffer buffer = ByteBuffer.wrap(data.getBytes());
writeChannel.write(buffer);
writeChannel.closeFinally();
response.sendRedirect("/helo.jsp");
}
}
| << 前へ |