cordova-plugin-file

https://github.com/apache/cordova-plugin-file

プロジェクトを作る

cordova create (ディレクトリ名) (ネームスペース) (タイトル)  
cd (ディレクトリ名)  
cordova platform add android  
cordova plugin add cordova-plugin-file  

クラス作成例

たとえば、次のようなクラスを作りました。

function TextFileSystem(dirPath) {  
  this.dirPath = dirPath  
};  

TextFileSystem.prototype.readFile = function readFile(fileName, success, fail) {  
    window.resolveLocalFileSystemURL(  
        this.dirPath+fileName,  
        function(fileEntry) {  
            fileEntry.file(  
                function(file) {  
                    var reader = new FileReader();  
                    reader.onloadend = function() {  
                        success(this.result);  
                    };  
                    reader.readAsText(file);  
                },  
                fail  
            );  
        },  
        fail  
    );  
};  

TextFileSystem.prototype.createFile = function createFile(fileName, data, success, fail) {  
    window.resolveLocalFileSystemURL(  
        this.dirPath,  
        function(fileSystem) {  
            // ファイルを生成する、または上書きオープンする  
            fileSystem.getFile(  
                fileName,  
                {  
                    exclusive: false,  
                    create: true,  
                },  
                function(fileEntry) {  
                    // 作成できたので書き込む  
                    fileEntry.createWriter(  
                        function(writer) {  
                            writer.write(data);  
                            success();  
                        },  
                        fail  
                    );  
                },  
                fail  
            );  
        },  
        fail  
    );  
};  

TextFileSystem.prototype.removeFile = function writeFile(fileName, success, fail) {  
    // fetches filesystem.  
    window.resolveLocalFileSystemURL(  
        this.dirPath,  
        function(fileSystem) {  
            fileSystem.getFile(  
                fileName,  
                {  
                    exclusive: false,  
                    create: false,  
                },  
                function(fileEntry) {  
                    fileEntry.remove();  
                    success();  
                },  
                fail  
            );  
        },  
        fail  
    );  
};  

resolveLocalFileSystemURLは都度実行しています

resolveLocalFileSystemURL() を都度実行していますが、正直いいのか悪いのかわかりません。Dalvik側の onPause(), onResume() とかとの関係で、勝手にインスタンスが潰されると困るな、と。

failコールバック

fail のコールバックは一つのパラメータを取ります。chrome では error パラメータのオブジェクトは code のみからなります。

function (error) {  
    console.log(error.code); // 数字だけ出る  
}  

エラーコードは https://developer.mozilla.org/en-US/docs/Web/API/FileError あたり参照。

cordova.file.* の中身 on Android

applicationDirectory: "file:///android_asset/"  
applicationStorageDirectory: "file:///data/user/0/(ネームスペース)/"  
cacheDirectory: "file:///data/user/0/j(ネームスペース)/cache/"  
dataDirectory: "file:///data/user/0/(ネームスペース)/files/"  
documentsDirectory: null  
externalApplicationStorageDirectory: "file:///storage/emulated/0/Android/data/(ネームスペース)/"  
externalCacheDirectory: "file:///storage/emulated/0/Android/data/j(ネームスペース)/cache/"  
externalDataDirectory: "file:///storage/emulated/0/Android/data/(ネームスペース)/files/"  
externalRootDirectory: "file:///storage/emulated/0/"  
sharedDirectory: null  
syncedDataDirectory: null  
tempDirectory: null  

nullが出ているので注意が必要です。

また、iOSとは値が違ってくるのだろうと思います。

パソコンとつなげるなら for Windows

externalDataDirectory(file:///storage/emulated/0/Android/data/(ネームスペース)/files/)は、Windowsでは

(デバイス)\内部共有ストレージ\Android\data\(ネームスペース)\files  

になります。