FileReader(cordova插件文件)失败
我正在尝试使用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,
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触发了失败回调。我非常困惑。我拉线程并更新了我的代码(见上文),但仍然不知道该做什么。如果您有任何见解,我将非常感激。