Titanium mobileの基礎12〜ファイルの読み書き

アプリ内でファイル操作を行う。
下記ではファイル操作をした結果をコンソールに出力している。

注意

AndroidiOSで大幅にコードが異なるので注意
・ドットインストールの手順はiPhoneシミュレータ準拠のためAndroidエミュレータで実行した場合は下記エラーになる。
 

ソース

※上半分がiPhone用で、下半分がAndroid

app.js

// サンプルデータ
var data = {'hoge':100, 'foo':200, 'bar':300};

if (Ti.Platform.osname == 'iphone') {
// iPhoneの場合

	// 決まり文句
	var file = Ti.Filesystem.getFile(Ti.Filesystem.resourcesDirectory, 'mydata.txt');

	// ファイルの存在チェック
	if (!file.exists) {
		// 存在しなければ作成
		file.createFile();
	};

	// 文字列としてファイル書き込み
	//  (※デフォルトだと配列として書き込んでしまうため)
	file.write(JSON.stringify(data));

	// ファイル読み込み
	var contents = file.read();

	// 読み込んだデータをコンソールに出力
	//   JSON -> オブジェクト形式にパースしてから出力させる
	Ti.API.info(JSON.parse(contents));
	
} else {
// Androidその他の場合

	var newDir = Ti.Filesystem.getFile(Ti.Filesystem.externalStorageDirectory,'datas');
	newDir.createDirectory();
  
	var file = Ti.Filesystem.getFile(newDir.nativePath,'mydata.txt');
	if (!file.exists) {
    	file.write("");
	};
 
	file.write(JSON.stringify(data), false);
 
	var contents = file.read();
	var parsed_contents = JSON.parse(contents);
 
	Ti.API.info("filepath: " + contents.getNativePath());
	Ti.API.info("filecontent_source: " + contents);
	Ti.API.info("hoge: " + parsed_contents.hoge);
	Ti.API.info("foo: " + parsed_contents.foo);
	Ti.API.info("bar: " + parsed_contents.bar);
};

所感

現在iPhoneシミュレータがうまく動かないので、コンソールに表示させる動作確認はAndroidエミュレータで行うしかない。
今回はそれが結果的に吉と出て、Androidの場合についての勉強のきっかけになった。