FileReader(cordova插件文件)失败

FileReader(cordova插件文件)失败,cordova,cordova-plugins,phonegap-plugins,phonegap,Cordova,Cordova Plugins,Phonegap Plugins,Phonegap,我正在尝试使用cordova插件文件插件读取和写入文件。写文件似乎很好,但当我去读文件时,它不起作用,我设置的失败回调也会运行 function getData(fetch) { alert('Getting data') window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fs) { fs.root.getFile(department + ".txt", { create: false,

我正在尝试使用cordova插件文件插件读取和写入文件。写文件似乎很好,但当我去读文件时,它不起作用,我设置的失败回调也会运行


function getData(fetch) {
    alert('Getting data')
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fs) {
    fs.root.getFile(department + ".txt", { create: false, exclusive: false }, function (fileEntry) {
        alert('reading this file: ' + JSON.stringify(fileEntry))
        readFile(fileEntry);
    }, addDepartment);
    });

    if (typeof sessionStorage.currentGroup != 'undefined') {groupData = dataActive[sessionStorage.currentGroup];}
    if (typeof sessionStorage.currentSubgroup != 'undefined') {subgroupData = groupData[sessionStorage.currentSubgroup];}
    if (typeof sessionStorage.currentItem != 'undefined') {itemData = subgroupData[sessionStorage.currentItem];}
    if (typeof itemData != 'undefined') {
    UCC = itemData.UCC;
    GTIN = itemData.GTIN;
    ProductionDate = itemData.ProductionDate;
    Weight = itemData.Weight;
    SerialNum = itemData.SerialNum;
    }
    fetch();
}


function readFile(fileEntry) {
    alert('Reading file')

    fileEntry.file(function (file) {
        var reader = new FileReader();

        reader.onloadend = function() {
            console.log("Successful file read: " + this.result);
            window.dataActive = JSON.parse(this.result);
            alert('dataActive was read as: ' + dataActive)
            displayFileData(fileEntry.fullPath + ": " + this.result);
        };
        reader.readAsText(file);

    }, alert('failed to read file!'));
}
我一直得到“读取文件失败”,其余代码无法运行,因为没有数据(我需要从文件中读取数据)。我对JavaScript和PhoneGap/Cordova有点陌生

使现代化 我试图调试我的代码,因为它充满了问题,但现在我已经降到最低限度,我已经仔细检查了所有内容,我仍然不知道问题是什么。我已经非常仔细地跟踪了文档示例(),但它根本不起作用。当它读取文件时,我总是得到null。我的代码如下:


window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fs) {

    fs.root.getFile("newPersistentFile.txt", { create: true, exclusive: false }, function (fileEntry) {
        alert(JSON.stringify(fileEntry))
        // fileEntry.name == 'someFile.txt'
        // fileEntry.fullPath == '/someFile.txt'
        writeFile(fileEntry, 'sample text');
        readFile(fileEntry);

    }, function() {alert('onErrorCreateFile')});

}, function() {alert('onErrorLoadFs')});

function readFile(fileEntry) {

    fileEntry.file(function (file) {
        var reader = new FileReader();

        reader.onloadend = function() {
            console.log("Successful file read: " + this.result);
            //displayFileData(fileEntry.fullPath + ": " + this.result);
        };

        reader.readAsText(file);

    }, function() {alert('onErrorReadFile')});
}

function writeFile(fileEntry, dataObj) {
    // Create a FileWriter object for our FileEntry (log.txt).
    fileEntry.createWriter(function (fileWriter) {

        fileWriter.onwrite = function() {
            alert("Successful file write...");
            readFile(fileEntry);
            alert('Contents are: ' + this.result);
        };

        fileWriter.onerror = function (e) {
            alert("Failed file write: " + e.toString());
        };

        fileWriter.write(dataObj);
    });
}



您使用的参数与内部函数不同。 您的代码应该如下所示:

function readFile(fileEntry) {
    alert('Reading file')

    fileEntry.file(function (fileEntry) {
        var reader = new FileReader();

        reader.onloadend = function() {
            console.log("Successful file read: " + this.result);
            window.dataActive = JSON.parse(this.result);
            alert('dataActive was read as: ' + dataActive)
            displayFileData(fileEntry.fullPath + ": " + this.result);
        };
        reader.readAsText(fileEntry);

    }, alert('failed to read file!'));
}

我终于明白了!老实说,我不确定我一开始做错了什么,但在我的车轮旋转了很久之后,我终于让它工作了。这是我的密码。这只是一个示例,所以它实际上没有做任何有用的事情,但是如果有人有相同的问题,希望这也能帮助他们,他们可以编辑它,以满足他们的需要



window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fs) {

    fs.root.getFile("newPersistentFile2.txt", { create: true, exclusive: false }, function (fileEntry) {
        // fileEntry.name == 'someFile.txt'
        // fileEntry.fullPath == '/someFile.txt'
        //var sample = new Blob(['some file data'], { type: 'text/plain' }); this works too or you can just use ['some file data'] like below
        writeFile(fileEntry, ['some file data']);

    }, function() {alert('onErrorCreateFile')});

}, function() {alert('onErrorLoadFs')});

function readFile(fileEntry) {

    fileEntry.file(function (file) {
        var reader = new FileReader();

        reader.onload = function() {
            alert("Successful file read: " + this.result);
            //displayFileData(fileEntry.fullPath + ": " + this.result);
        };

        reader.readAsText(file);

    }, function() {alert('onErrorReadFile')});
}

function writeFile(fileEntry, dataObj) {
    // Create a FileWriter object for our FileEntry (log.txt).
    fileEntry.createWriter(function (fileWriter) {

        fileWriter.onwrite = function() {
            alert("Successful file write...");
            readFile(fileEntry);
        };

        fileWriter.onerror = function (e) {
            alert("Failed file write: " + e.toString());
        };

        fileWriter.write(dataObj);
    });
}




我刚刚试过这个,它似乎仍然在说“读取文件失败”:(@brettbalen然后调试它,使用alert(fileEntry);…是对象吗?是的fileEntry是一个对象,其字段包括FileSystem:persistent,nativeURL:file:///data/user/0/com.phonegap.helloworld/files/files/data.txt,和fullPath:/data.txt,文件是一个包含以下内容的对象:localURL:cdvfile://localhost/persistent/data.txtIt 看起来我主要是通过转换cdv文件PAT来实现的h是一个本机路径,但是现在当结果应该是“{}”时,它被读取为null,并且不知何故stll触发了失败回调。我非常困惑。我拉线程并更新了我的代码(见上文),但仍然不知道该做什么。如果您有任何见解,我将非常感激。