PhoneGap读写SD卡(键值对方式)

var fileSystem = null;
//等待加载PhonrGap
document.addEventListener("deviceready", onDeviceReady, true);

function onDeviceReady() {
    //request the persistent file system
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFSSuccess, onError);
}
//加载phoneGap成功
function onFSSuccess(fs) {//alert("aaa="+ fs);
    fileSystem = fs;
}

function onError(e) {
alert(e);
    //getById("#content").innerHTML = "<h2>Error</h2>"+e.toString();
}




//areater缓存存储值 防止同时调写文件多次,只有最后的写成功(javascript异步)
var areater = new Array();
var count1 = 0;
//创建文件写文件
function save2File(fileName, key, value, keyValueSplit, recodeSplit) {
    //alert(6)
    write2File(fileName, key, value, keyValueSplit, recodeSplit, "setSaveSuccess");
}
//创建文件写文件
function write2File(fileName, key, value, keyValueSplit, recodeSplit, responseFun) {//responseFun函数名显示结果

    //alert(5)
    var saveSuccess = true;
    var path_1 = fileName;
    var keyValueSplit_1 = keyValueSplit;
    var recodeSplit_1 = recodeSplit;
    var file_ = "";

    var parameter = key + keyValueSplit + value;
    areater[count1++] = parameter;
    doReadFile();
    //文件存在读取文件如果不存在创建文件
      function doReadFile() {
        //alert(9)
        fileSystem.root.getFile(path_1, {
            create: true
        }, function(f) {
            reader = new FileReader();
            reader.onloadend = function(e) {
                console.log("go to end");
                //file_读取到的内容
                file_ = e.target.result;
                alert(e.target.result)
                //logit("<pre>" + e.target.result + "</pre><p/>");
            };
            reader.readAsText(f);
        }, onError);

        function onError(e) {}
        doAppendFile();
    }

    //文件不存在创建文件并写文件

    function doAppendFile() {
        alert("doAppendFile");
        fileSystem.root.getFile(path_1, {
            create: true
        }, function(f) {
            f.createWriter(function(writerOb) {
                writerOb.onwrite = function() {
                    //logit("Done writing to file.<p/>");
                };
                var total = new Array();
                total = file_.split(recodeSplit_1);
                var value_a = "";
                alert(areater.length);
                //文件不存在第一次写
                if (file_ == undefined || file_ == null || file_ == "") {
                    value_a = areater.join(recodeSplit_1);
                } else {//文件存在
                    var strs = new Array();
                    strs = file_.split(recodeSplit_1);
                    var map = getMap();
                    for (i = 0; i < strs.length; i++) {
                        var str = strs[i];
                        //alert(strs[i])
                        var key = str.substr(0, str.indexOf(keyValueSplit_1)) + "";
                        var value = str.substr(str.indexOf(keyValueSplit_1) + 1) + "";
                        map.put(key, value);
                    }
                    for (i = 0; i < areater.length; i++) {
                        var str = areater[i];
                        var key = str.substr(0, str.indexOf(keyValueSplit_1)) + "";
                        var value = str.substr(str.indexOf(keyValueSplit_1) + 1) + "";
                        map.put(key, value);
                    }
                    var str = map.keyset() + "";
                    var str2 = new Array();
                    str2 = str.split(",");
                    var str3 = new Array();
                    for (i = 0; i < str2.length; i++) {
                        str3[i] = str2[i] + keyValueSplit_1 + map.get(str2[i]); // 合并key和value
                    }
                    value_a = str3.join(recodeSplit_1);
                    //自定义Map
                    function getMap() {
                        var map_ = new Object();
                        map_.put = function(key, value) {
                            map_[key + '_'] = value;
                        };
                        map_.get = function(key) {
                            return map_[key + '_'];
                        };
                        map_.remove = function(key) {
                            delete map_[key + '_'];
                        };
                        map_.keyset = function() {
                            var ret = "";
                            for (var p in map_) {
                                if (typeof p == 'string' && p.substring(p.length - 1) == "_") {
                                    ret += keyValueSplit_1;
                                    ret += p.substring(0, p.length - 1);
                                }
                            }
                            if (ret == "") {
                                return ret.split(keyValueSplit_1);
                            } else {
                                return ret.substring(1).split(keyValueSplit_1);
                            }
                        };
                        return map_;
                    }
                }
                writerOb.write(value_a);
                //写成功返回确认
                var runFun = responseFun + "(" + saveSuccess + ")";
                //字符串转对象
                 eval_r("(" + runFun + ")");
            });
        }, onError);
        function onError(e) { alert("qqq写文件内容错误:"+e); }
    }
    // return write1;
}


//读文件中所有内容
function readFromFileAll(filename, keyValueSplit, recodeSplit, responseFun) {
//alert(456)
    //var findValue;
    var fileSystem1 = null;
    var path_1 = filename;
    var keyValueSplit_1 = keyValueSplit;
    var recodeSplit_1 = recodeSplit;
    var file_ = "";
    var flag = 1;  
    document.addEventListener("deviceready", onDeviceReady1, true);
//alert(1)
function onDeviceReady1() {
//alert(2)
   //request the persistent file system
   window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFSSuccess1, onError);
}
function onFSSuccess1(fs) {//alert("aaa="+ fs);
//alert(3)
   fileSystem1 = fs;
    doReadFile();
}
function onError(e) {
alert(e);
   //getById("#content").innerHTML = "<h2>Error</h2>"+e.toString();
}
    function doReadFile() {
    //alert(5)
        fileSystem1.root.getFile(path_1, {
            create: true
        }, function(f) {
       // alert(6)
            reader = new FileReader();
            reader.onloadend = function(e) {
                console.log("go to end");
                file_ = e.target.result;
                //alert("9998="+e.target.result) 
                var total = new Array();
                total = file_.split(recodeSplit_1);
                //var json1 = new Array();
                var json1 = {};
                // var i = 0;
                for (j = 0; j < total.length; j++) {
                //alert(1)
                    var str = total[j];
                    var s1 = str.substring(0, str.lastIndexOf(keyValueSplit_1));
                    var s2 = str.substring(str.lastIndexOf(keyValueSplit_1) + 1);
                    json1[s1] = s2;
                }   
               
                //alert(json1)       
                var runFun = responseFun + "(" + WMW.obj2str(json1) + ")";                         
                //alert(runFun)
 
                 eval_r("(" + runFun + ")");
            };
            reader.readAsText(f);
        }, onError);
        function onError(e) { alert("读取文件内容错误:"+e); }
    }
}
//更具KEY查找文件中值
function readFromFile(filename, key, keyValueSplit, recodeSplit,responseFun) {
    var path_1 = filename;
    var keyValueSplit_1 = keyValueSplit;
    var recodeSplit_1 = recodeSplit;
    var file_ = "";
    doReadFile();
    function doReadFile() {
        //alert(doReadFile)
        fileSystem.root.getFile(path_1, {
            create: true
        }, function(f) {
            reader = new FileReader();
            reader.onloadend = function(e) {
                file_ = e.target.result;
                //alert("9998=" + e.target.result);
                var total = new Array();
                total = file_.split(recodeSplit_1);
                for (j = 0; j < total.length; j++) {
                    var str = total[j];
                    //alert(9)
                    if (str.substring(0, str.lastIndexOf(keyValueSplit_1)) == key) {
                        //alert(7)
                        var value = str.substring(str.lastIndexOf(keyValueSplit_1) + 1);
                        //alert("value=" + value);
                        // 设置从文件中读取值
                         var runFun = responseFun + "(" + value + ")";
                        // alert(runFun)
                        eval_r("(" + runFun + ")");
                        break;
                    }
                }
            };
            reader.readAsText(f);
        }, onError);

        function onError(e) {}
    }
}
// 设置从文件中读取单个值

function setReadFileValue(val) {
    var value = val;
    //alert(value);
}
// 设置从文件中读取所有值

function setReadFileAll(val) {
    alert(7)
    alert("value="+val);
}
// 设置从文件写成功
function setSaveSuccess(val) {
    //alert(val)
}

//测试
function test() {
    alert("11");
    onWrite3();
    //readFromFile("dataFile.txt", "nnn",  ",", "\r\n");
    //readFromFileAll("aaa/dataFile.txt",",","\r\n","setReadFileAll");
    //save2File("aa/dataFile.txt", "9999", "99999999", ",", "\r\n");
    // save2File("dataFile.txt", "888888", "99999999", ",", "\r\n");
   // write2File("dataFile.txt", "wwww", "oooooo", ",", "\r\n", "setReadFileAll");
    //alert("aa="+aa)
}


//PhoneGap创建文件代码太过繁琐 就省去了创建文件的过程,传参时只能写文件名,不能加路径
//要想把文件保存在文件夹,就先掉一下onWrite3()创建文件夹的作用。
//说这么多意思就是要把文件写在某个文件下,前提是要有这个文件,传参时才可加路径

//刚开始学,有不足之处还望指教
//文中WMW.obj2str(json1)函数没有提供,对象转换的作用,可用字符串代替直接输出
function onWrite3() {
   //  alert("onWrite");
document.addEventListener("deviceready", onDeviceReady3, false);
}
function onDeviceReady3() {
    //alert("onWrite3()");
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS3, fail);
}
//获取newFile目录,如果不存在则创建该目录
function gotFS3(fileSystem) {
     var filePath="myfile";
//var filePath = path_1.substring(0, path_1.lastIndexOf("/"));
newFile = fileSystem.root.getDirectory(filePath, {create:true, exclusive:false}, writerFile3, fail);
}
function writerFile3(){}
function fail(){}

猜你喜欢

转载自qinjianlu920.iteye.com/blog/1940949