PhoneGap(Cordova)公式のファイルAPIインターフェイスの使い方がえらい面倒だったので簡単に操作できるラッパーを作りました。
使用にはRSVP.jsが必要です。
-
rsvp.js
とcordovafs.js
をPhoneGapプロジェクトのjsディレクトリに置いてhtmlから読み込みます。<script type="text/javascript" src="/path/to/rsvp.jp"></script> <script type="text/javascript" src="/path/to/cordovafs.js"></script>
-
JavaScriptでCordovaFileSystemをロードします。
var fs = new CordovaFileSystem('アプリケーション名');
-
ロードしたCordovaFileSystemオブジェクトを使用して各種ファイル操作を行います。
CordovaFileSystemオブジェクトを作成します。
-
appname
アプリケーション名を指定します。SDカードのrootにファイルを作成するのは行儀が悪いので、CordovaFileSystemではアプリケーション名のディレクトリを作成して、その中のファイルやディレクトリを操作する形になります。
-
CordovaFileSystemオブジェクト
このオブジェクトを使用して各種ファイル操作を行います。
// SDカード上のmyAppディレクトリ以下のファイルやディレクトリを操作する
var fs = new CordovaFileSystem('myApp');
SDカード上のファイルを読み込みます。
-
filename
ファイルパスを指定します。ファイルが存在しない場合はエラーが返ります。
普通にファイルパスを指定するとコンストラクタで指定したアプリケーション名のディレクトリ以下を探しに行きますが、ファイルパスの先頭に
/
を付ければSDカードのrootディレクトリからのパスを指定してファイルを参照することができます。// myApp/hoge/fuga.txtを読みに行く fs.read('hoge/fuga.txt', function(err, data) ... // SDカードroot上のotherApp/piyoを読みに行く fs.read('/otherApp/piyo', function(err, data) ...
-
callback
ファイルを読み込んだデータを処理したりエラー判定をするコールバック関数を指定します。
コールバック関数に渡される引数は
(Errorオブジェクト, 読み込んだデータ)
です。
// SDカードの'アプリケーション名'ディレクトリに保存してある'hoge.txt'を読み込む
fs.read('hoge.txt', function (err, data) {
if (err) {
throw err; // ファイルが存在しないなどのエラー
}
// dataにhoge.txtの内容が入っている
});
SDカードにファイルを書き込みます。
-
filename
ファイルパスを指定します。ファイルが存在しない場合は新規に作成します。ファイルが存在する場合は上書きします。存在しないディレクトリの階層上のパスを指定しても自動的にそこまでのディレクトリが作成されます。
なお、
read()
のようにrootディレクトリからの指定はできません。 -
data
ファイルに書き込む内容を指定します。
-
callback
ファイルを書き込んだ後に実行される関数を指定します。
コールバック関数に渡される引数は
(Errorオブジェクト)
です。
// myApp/hoge/fuga/piyo.txtに'Lorem ipsum dolor sit ...'というテキストを書き込む
var data = 'Lorem ipsum dolor sit ...';
fs.write('hoge/fuga/piyo.txt', data, function (err) {
if (err) {
throw err; // 書き込みエラー
}
});
ファイルを削除します。
-
filename
ファイルパスを指定します。ファイルが存在しない場合はエラーが返ります。
read()
のようにrootディレクトリからの指定はできません。 -
callback
ファイルを削除した後に実行される関数を指定します。
コールバック関数に渡される引数は
(Errorオブジェクト)
です。
// myApp/hoge/fuga/piyo.txtを削除する
fs.remove('hoge/fuga/piyo.txt', function (err) {
if (err) {
throw err; // 削除エラー
}
});
ファイルが存在するか確認します。true
,false
のような戻り値ではなく、エラーが発生したかどうかでの判定なのでread()
を使った方がいいかもという。
-
filename
ファイルパスを指定します。ファイルが存在しない場合はエラーが返ります。
read()
と同様にrootディレクトリからの指定が可能です。 -
callback
ファイルを削除した後に実行される関数を指定します。
コールバック関数に渡される引数は
(Errorオブジェクト)
です。
// SDカードのroot上にhoge.txtが存在するか確認する
fs.fileExists('/hoge.txt', function (err) {
if (err) {
throw err; // ファイルが存在しない、もしくはエラー
}
// ファイルが存在する
});
ディレクトリが存在するか確認します。fileExists()
と同様に、true
,false
のような戻り値ではなく、エラーが発生したかどうかでの判定します。
-
dirname
ディレクトリ名を指定します。ディレクトリが存在しない場合はエラーが返ります。
なお、
read()
のようにrootディレクトリからの指定はできません。 -
callback
ファイルを削除した後に実行される関数を指定します。
コールバック関数に渡される引数は
(Errorオブジェクト)
です。
// myApp/hoge/fugaディレクトリが存在するか確認する
fs.dirExists('hoge/fuga', function (err) {
if (err) {
throw err; // ディレクトリが存在しない、もしくはエラー
}
// ディレクトリが存在する
});
ディレクトリを作成します。
-
dirname
SDカードrootからの ディレクトリパスを指定します。存在しないディレクトリの階層上のパスを指定しても自動的にそこまでのディレクトリが作成されます。
-
isfile(default:
false
) 省略可能true
にするとパスの最後をファイル名とみなし、その親ディレクトリまでを作成します。ファイル名混じりのパスを分割してディレクトリ部分のパスを作成するのが面倒という場合に使用します。 -
callback
ディレクトリを作成した後に実行される関数を指定します。
コールバック関数に渡される引数は
(Errorオブジェクト)
です。
// SDカードroot上に'hoge/fuga'ディレクトリを作成する
fs.write('hoge/fuga', function (err) {
if (err) {
throw err; // ディレクトリ作成エラー
}
});
// SDカードroot上に'hoge/fuga'ディレクトリを作成する(引数にファイル名を指定)
fs.write('hoge/fuga/piyo.txt', true, function (err) {
if (err) {
throw err; // ディレクトリ作成エラー
}
});
// SDカードroot上に'hoge/fuga/piyo.txt'ディレクトリを作成する(isfileを指定していないのでpiyo.txtもディレクトリとみなす)
fs.write('hoge/fuga/piyo.txt', function (err) {
if (err) {
throw err; // ディレクトリ作成エラー
}
});
ディレクトリを削除します。
-
dirname
ディレクトリパスを指定します。ディレクトリが存在しない場合はエラーが返ります。
read()
のようにrootディレクトリからの指定はできません。 -
callback
ディレクトリを削除した後に実行される関数を指定します。
コールバック関数に渡される引数は
(Errorオブジェクト)
です。
// myApp/hoge/fugaディレクトリを削除する
fs.rmdir('hoge/fuga', function (err) {
if (err) {
throw err; // ディレクトリが存在しないなどのエラー
}
});
指定したディレクトリ内のファイル/ディレクトリ一覧を取得します。
-
dirname
ディレクトリパスを指定します。ディレクトリが存在しない場合はエラーが返ります。
read()
と同様にrootディレクトリからの指定が可能です。 -
callback
ファイル/ディレクトリ一覧に対して処理したりエラー判定をするコールバック関数を指定します。
コールバック関数に渡される引数は
(Errorオブジェクト, FileEntryオブジェクトの配列)
です。FileEntryオブジェクトについては公式ドキュメントを参照してください。
// myApp/hogeディレクトリ内のファイル/ディレクトリ一覧を取得する
fs.list('hoge', function (err, fileEntries) {
if (err) {
throw err; // ディレクトリが存在しないなどのエラー
}
// ファイル名一覧をconsole.logで出力
for (var i = 0; i < fileEntries.length; i++) {
// ディレクトリは除外
if (! fileEntries[i].isDirectory) {
console.log(fileEntries[i].name);
}
}
});
PhoneGap3.4.0での動作を確認しています。それ以下のバージョン(特にバージョン3より前)では正常に動作しない可能性があります。
list()
メソッド追加
- 初版リリース
MIT licenseで配布します。
© 2014 ktty1220