SoftBankデータフォルダ操作(2)

や、やられてしまった。


本来であるならば、この後データフォルダの実際の読み込み、書き込みについて
語ろうと思っていたのだが、先日3GCのデータフォルダ操作を初めて行い、その際に
わかった、P5,P6,P7とは違う部分について語ることにする。


データフォルダを使用する場合、最初にopneで開くわけだが、その際のカレントは以下となる。


実機データフォルダ:"file:///ms/"
SDカード:"file:///mc/"


カレント自体は、P5らや3GCは何も変わらない。
しかし、そこに作成できるフォルダは別となる。
P5らでは、カレントの直下にフォルダを作成することができる。
しかし、3GCはカレントの直下にフォルダを作成しようとするとIOExceptionが投げられる。


どうやら3GCでは、カレントにフォルダを作成することができないらしい。
そこであらかじめ用意されている、「その他ファイル」にアクセスし、そこにフォルダを作成する。
「その他ファイル」のパスは"Other Documents"である。OtherとDocumentsの間は、スペースを開ける必要がある。
つまり3GCの場合、データフォルダを操作し、ファイルを作成するのであれば、カレントを以下と考えたほうがいい。


実機データフォルダ:"file:///ms/Other Documents/"
SDカード:"file:///mc/Other Documents/"


ここならば、フォルダを作成することができる。
実際に見事フォルダを作成することができた。
さすがにてごわい3GC。しかし、恐怖が終わることはまだない。この後俺の中で更なる悲劇が起こった。
なんと、上記の位置に作成したフォルダの中に、フォルダを作ることができない!ありえん!マジありえん!
プログラムで書くとこうなる。


StorageConnection conn = null;
try {
// まずはtestフォルダを作成
conn = (StorageConnection)Connector.open("file:///ms/Other Documents/test/");
if (!conn.exists()) {
conn.createFolder();
}
conn.close();

// 次にtestフォルダ内にtestsubフォルダを作成しようとする
conn = (StorageConnection)Connector.open("file///ms/Other Documents/test/testsub/");

// IOExceptionが投げられる(悲劇)
if (!conn.exists()) {
conn.createFolder();
}
} catch (Exception e) {
} finally {
try {
conn.close();
} catch (Exception e) {
}
}

アプリ側の問題だと最初思ったのだが、実際に端末からフォルダ作ろうとしても作れないので、おそらく3GCの
仕様なのだろう。ってなわけで、現在のアプリのデータフォルダ内の構成を考え直しだよ!あ〜あ。


なお、StorageConnectionを使用する場合のJadファイル内の MIDlet-Permissions の書き方は以下となる。一応httpも付随。


MIDlet-Permissions: javax.microedition.io.Connector.http,com.j_phone.io.Connector.StorageConnection.read,com.j_phone.io.Connector.StorageConnection.write