2

我尝试使用 PhonegapgetFile功能在我的 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文件。

谢谢你的帮助。

4

2 回答 2

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 中。您必须在安装后复制文件。

当您调用时,您可以访问应用程序的 Document 文件夹window.requestFileSystem

于 2012-09-26T11:22:15.180 回答
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);
}

试一试,让我知道这是否可行。

于 2012-09-26T10:20:16.763 回答