テキスト保存の流れ
テキストボックスに書いたテキストを終了時に保存し、次回起動時にラベルに表示する。 |
では、メソッドを見てみましょう。まずは保存のsaveメソッドからです。最初にOutputStreamとOutputStreamWriterを保管する変数を用意しておきます。
OutputStream output = null;
OutputStreamWriter writer = null;
続いて、Connector.openOutputStreamでOutputStreamを作成し、これを引数にしてOutputStreamWriterを作成します。これで、ストリーム関係の準備ができました。
output = Connector.openOutputStream("scratchpad:///0;pos=0");
writer = new OutputStreamWriter(output);
次に、保存するテキストの準備です。テキストは、Stringのまま保存することもできるのですが、そうすると可変長のデータになってしまいます。例えば、長いテキストを保存した後で短いテキストを再度保存すると、前のデータの一部が残ってしまったりするわけです。
そこで、ここでは決まった大きさのchar配列(ここでは20キャラクタ分)を用意し、そこにテキストのキャラクタを1文字ずつコピーしていくことにしました。
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];
これで、キャラクタ20文字分のchar配列が作成されました。これを保存すれば、常に同じサイズのデータが保存されることになります。後は、これをスクラッチパッドに書き出すだけです。
writer.write(arr);
writer.flush();
OutputStreamWriterのwriteは、char配列をそのまま保存することができます。最後にcloseでストリームを解放して作業完了です。
テキスト読み込みの流れ
続いて、テキストを読み込むloadメソッドです。こちらも、最初にストリームを保管する変数を用意しておきます。
InputStream input = null;
InputStreamReader reader = null;
そして、InputStreamを作成し、それを引数にしてInputStreamReaderを作成します。
input = Connector.openInputStream("scratchpad:///0;pos=0");
reader = new InputStreamReader(input);
保存されたテキストを読み込むためのchar配列を用意し、そこにreadで読み込みます。後は、char配列を元にStringを作成し、利用すればいいわけですね。
char[] arr = new char[20];
reader.read(arr);
label.setText(new String(arr));
テキストの値は少々扱いが面倒ですが、「テキストを定型の値として読み書きする」ということに注意すれば、後はそう難しくはありませんね。数値とテキストが保管できるようになれば、スクラッチパッドで保存できるデータの幅もだいぶ広がります。いろいろな情報を補完することができそうですね。