`
qinjianlu920
  • 浏览: 1277 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

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(){}
分享到:
评论

相关推荐

    phoneGap的写入文件

    例如,对于外部存储(如SD卡),需要在AndroidManifest.xml中声明`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`权限。 至于压缩包里的"2014.2.261-ark-test-write封装好到js里备份(目录是d盘)",这可能是...

    phonegap nfc读写信息

    PhoneGap NFC读写信息是移动应用开发中的一个重要领域,它涉及到近场通信(Near Field Communication,简称NFC)技术在Android和iOS等平台上的应用。PhoneGap是一个流行的跨平台框架,它允许开发者使用HTML、CSS和...

    phoneGAP2.9.1.zip

    总的来说,PhoneGap 2.9.1是一个历史版本,但它展示了PhoneGap跨平台开发的核心理念和早期实现方式。随着技术的发展,PhoneGap不断改进,以适应不断变化的移动开发需求。尽管有其局限性,但PhoneGap依然是许多开发者...

    IONIC+PhoneGap项目源码

    开发者可以通过研究这个版本的源码,了解早期IONIC的架构和实现方式,同时对比新版本,理解IONIC的发展历程。 综合以上,这个压缩包提供了一个使用IONIC和PhoneGap开发的项目源码,以及关于PhoneGap的深入学习材料...

    Phonegap拍照,图片保存应用

    PhoneGap的核心理念是通过Web技术来桥接移动设备的原生功能,如摄像头、地理位置、存储等,让Web开发者也能开发出具有原生体验的移动应用。 在"PhoneGap拍照,图片保存应用"这个主题中,我们将探讨如何利用PhoneGap...

    PhoneGap实例

    3. **文件系统访问**:通过`file` API,开发者可以读写本地文件,创建文件夹结构,这对于存储用户数据或者离线内容非常有用。在实例中,可能会有文件操作的示例。 4. **通知与对话框**:PhoneGap提供了`通知`API,...

    phonegap完整例子!

    以上就是对"phonegap完整例子!"所涵盖的知识点的详细解析,包括PhoneGap的基本原理、与Android的集成、pad设备的适配、自定义插件的开发以及可能的数据处理策略。这些内容为深入学习和实践PhoneGap开发提供了全面的...

    PhoneGAP实例源码

    PhoneGap的核心理念是通过Web技术来桥接移动设备的原生功能,使得开发者无需深入学习各种平台的原生代码,就能创建功能丰富的应用。 在这个"PhoneGAP实例源码"压缩包中,包含了三个有趣的实例:汇率换算器、万圣节...

    phonegap源码+示例

    Cordova2.9是PhoneGap的一个重要版本,它在那时提供了对多种移动操作系统的支持,包括iOS、Android、BlackBerry、Windows Phone等。这个版本包含了核心的API接口和插件系统,使得开发者可以通过JavaScript调用设备...

    PhoneGap介绍与原理

    - **同步调用支持**:除了异步调用,PhoneGap也支持同步调用方式,但这种方式可能会影响用户体验。 - **通信机制**:PhoneGap通过JavaScript和原生代码之间的消息传递来实现通信。例如,使用XMLHttpRequest(XHR)或...

    PhoneGap环境搭建demo

    PhoneGap环境搭建是开发跨平台移动应用的第一步,这里我们将详细讲解如何进行PhoneGap的配置和安装。 1. **系统需求**:首先,你需要一个支持PhoneGap开发的计算机系统,通常要求是Windows、Mac OS或Linux。确保...

    phonegap 桌面版6.3.0

    PhoneGap 6.3.0版本可能包含一些新的特性和改进,例如性能优化、错误修复或者对新API的支持。开发者在使用过程中应关注官方文档和更新日志,以获取最新的开发信息和最佳实践。总的来说,PhoneGap桌面版6.3.0是一个...

    PhoneGap-拍照上传DEMO

    3. **PhoneGap Camera Plugin**:PhoneGap的相机插件提供了一种更简单的方式来访问设备的摄像头。开发者可以通过调用`navigator.camera.getPicture`方法,选择拍照或从相册选取图片,并获取图片的Base64编码或文件...

    PhoneGap demo

    这个"PhoneGap demo"作为一个实际案例,可以帮助开发者理解PhoneGap的工作原理,学习如何将Web技术应用于移动开发,同时也可以借鉴其设计和实现方式,提升自己的开发技能。尽管对于初学者来说可能有一定难度,但它...

    phoneGap手机安装apk

    总的来说,PhoneGap为开发者提供了一种便捷的方式来构建跨平台的移动应用,通过理解其安装和调试流程,开发者可以更加高效地进行项目开发。同时,掌握各种调试技巧有助于快速定位问题,提升开发体验。在实际工作中,...

    phonegap开发插件合集

    5. **文件系统插件**:提供对设备本地存储的读写操作,方便应用保存和读取用户数据。 6. **网络状态插件**:检测设备的网络连接类型(如WiFi、蜂窝数据)和连接状态,有助于优化网络请求和用户体验。 7. **设备...

    phonegap入门经典源码

    3. 本地存储:PhoneGap支持Web Storage(包括localStorage和sessionStorage)以及SQLite数据库。通过`chapter9b.html`,我们可以学习如何在应用中持久化数据,如使用`window.localStorage`或`window.openDatabase()`...

    phonegap-1.0.0rc2.zip

    这个“phonegap-1.0.0rc2.zip”文件是PhoneGap的一个早期版本,版本号为1.0.0 Release Candidate 2,这表明它是一个在正式版本发布前的候选版本,可能包含了对早期版本的改进和修复。 PhoneGap的核心理念在于利用...

Global site tag (gtag.js) - Google Analytics