Phonegap 2.1 iOS:在app www文件夹中读取文件

时间:2012-09-26 09:50:40

标签: cordova jquery-mobile

我尝试使用Phonegap getFile函数在我的iOS应用程序(phonegap 2.1 + jquerymobile)中读取文件,但我总是遇到此错误:

Error in error callback: File3 = TypeError: 'undefined' is not an object

我的文件位于www/data/datajson.txt并包含一些json数据。

我的代码:

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}

function gotFS(fileSystem) {
    //get www folder path
    var path = window.location.pathname;
    path = path.substr( path, path.length - 10 );
    var pathwww = path;
    console.log(pathwww); /* /var/mobile/Applications/{ID}/{APPNAME}.app/www/ */
    fileSystem.root.getFile("file//"+pathwww+"data/datajson.txt", null, gotFileEntry, fail);
    // result : Error in error callback: File3 = TypeError: 'undefined' is not an object
    pathwww.getFile("file///data/datajson.txt", null, gotFileEntry, fail);
    // result : Error in success callback: File2 = TypeError: 'undefined' is not a function
}

function gotFileEntry(fileEntry) {
    fileEntry.file(gotFile, fail);
}

function gotFile(file){
    readDataUrl(file);
    readAsText(file);
}

function readDataUrl(file) {
    var reader = new FileReader();
    reader.onloadend = function(evt) {
        console.log("Read as data URL");
        console.log(evt.target.result);
    };
    reader.readAsDataURL(file);
}

function readAsText(file) {
    var reader = new FileReader();
    reader.onloadend = function(evt) {
        console.log("Read as text");
        console.log(evt.target.result);
    };
    reader.readAsText(file);
}

function fail(evt) {
    console.log(evt.target.error.code);
}

我不明白为什么我无法在我的www文件夹中导航并阅读我的datajson.txt文件。

谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

如果你想从你的应用程序中获取一个文本文件,你可以通过'ajax'调用来获取它

        $.ajax({
        url : 'data/datajson.txt',
        type : "get",
        dataType : "json",
        success : function(data, textStatus, jqXHR) {
            console.log('data loaded ' + JSON.stringify(data));
        },
        error : function(jqXHR, textStatus, errorThrown) {
            console.log('error loading data :' + errorThrown);
        }
    });

修改

如果您要编写文件,则无法将其写入与应用相同的位置。您需要将它们写入应用程序的Document文件夹。这是在安装时创建的,因此您无法将文件放在XCode中。您必须在安装后复制文件。

当您致电window.requestFileSystem

时,您可以访问应用的文档文件夹

答案 1 :(得分:1)

假设您的HTML文件位于文件夹www中,您可以尝试以下操作:

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}

function gotFS(fileSystem) {
    fileSystem.root.getDirectory("data", {create: true}).getFile("datajson.txt", null, gotFileEntry, fail);
}

function gotFileEntry(fileEntry) {
    fileEntry.file(gotFile, fail);
}

function gotFile(file){
    readDataUrl(file);
    readAsText(file);
}

function readDataUrl(file) {
    var reader = new FileReader();
    reader.onloadend = function(evt) {
        console.log("Read as data URL");
        console.log(evt.target.result);
    };
    reader.readAsDataURL(file);
}

function readAsText(file) {
    var reader = new FileReader();
    reader.onloadend = function(evt) {
        console.log("Read as text");
        console.log(evt.target.result);
    };
    reader.readAsText(file);
}

function fail(evt) {
    console.log(evt.target.error.code);
}

尝试让我知道这是否有效。