首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileReader (cordova-plugin-file)失败

FileReader (cordova-plugin-file)失败
EN

Stack Overflow用户
提问于 2019-10-21 01:25:40
回答 2查看 579关注 0票数 1

我正在尝试使用cordova- plugin -file插件来读写文件。写入文件似乎工作得很好,但是当我读取文件时,它不工作,并且我设置的失败回调运行。

代码语言:javascript
复制
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还不太熟悉,

更新

我试图调试我的代码,因为它充满了问题,但现在我降到了最低限度,我已经仔细检查了所有东西,但我仍然不知道问题是什么。我已经非常仔细地遵循了文档示例(https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/),但它就是不能工作。当它读取文件时,我一直得到null。我的代码如下:

代码语言:javascript
复制
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);
    });
}
EN

回答 2

Stack Overflow用户

发布于 2019-10-21 04:38:32

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

代码语言:javascript
复制
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!'));
}
票数 1
EN

Stack Overflow用户

发布于 2019-10-25 17:56:25

我终于明白了!老实说,我不确定我一开始做错了什么,但在旋转了我的轮子似乎很长一段时间后,我终于让它工作了。这是我的代码。这只是一个示例,所以它实际上不会做任何有用的事情,但是如果有人遇到了同样的问题,希望这也能帮助他们,他们可以根据需要进行编辑。

代码语言:javascript
复制
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);
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58475464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档