テキストの読み書き
ここまで説明したのは、基本的に数値などのデータサイズが固定されたものばかりでした。では、テキストの値をスクラッチパッドに保存するにはどうすればよいのでしょうか。
これには、ちょっとばかり手間がかかります。基本的には、テキストの読み書きを行うためのInputStreamReader/InputStreamWriterというものを使えばいいのですが、テキストは値の長さが可変であるため、そのままだとうまく値を読み書きするのが難しいのです。
実際に簡単な例をあげながら説明をしていきましょう。これは、テキストボックスに入力したテキストを終了時に保存し、次回起動の際にそれを読み込んでラベルに表示するサンプルです。
import java.io.*;
import javax.microedition.io.Connector;
import com.nttdocomo.ui.*;
public class SampleIApp extends IApplication {
public void start() {
Display.setCurrent(new MainPanel(this));
}
}
class MainPanel extends Panel implements SoftKeyListener {
IApplication iapp;
String msg;
Label label;
TextBox text;
MainPanel(IApplication app){
super();
this.iapp = app;
label = new Label();
label.setSize(200,30);
this.add(label);
text = new TextBox("",20,2,TextBox.DISPLAY_ANY);
this.add(text);
this.setSoftLabel(Frame.SOFT_KEY_2, "QUIT");
this.setSoftKeyListener(this);
load();
}
public void load(){
InputStream input = null;
InputStreamReader reader = null;
try {
input = Connector.openInputStream("scratchpad:///0;pos=0");
reader = new InputStreamReader(input);
char[] arr = new char[20];
reader.read(arr);
label.setText(new String(arr));
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void save(){
OutputStream output = null;
OutputStreamWriter writer = null;
try {
output = Connector.openOutputStream("scratchpad:///0;pos=0");
writer = new OutputStreamWriter(output);
char[] arr = new char[20];
char[] arr2 = text.getText().toCharArray();
int n = arr2.length > arr.length ? arr.length : arr2.length;
for(int i = 0;i < n;i++)
arr[i] = arr2[i];
writer.write(arr);
writer.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void softKeyPressed(int arg0) {}
public void softKeyReleased(int key) {
switch(key){
case Frame.SOFT_KEY_2:
save();
iapp.terminate();
}
}
}