Javascript 如何在Phonegap上读写文件?
我查看了Cordova的FileWriter和FileReader API,我知道它们是异步的 我还成功地让FileWriter和FileReader通过遵循 但我想知道是否有一种方法可以在写入文件后立即读取它。下面的代码显示了我想在Javascript 如何在Phonegap上读写文件?,javascript,file,cordova,Javascript,File,Cordova,我查看了Cordova的FileWriter和FileReader API,我知道它们是异步的 我还成功地让FileWriter和FileReader通过遵循 但我想知道是否有一种方法可以在写入文件后立即读取它。下面的代码显示了我想在gotFileWriter function onDeviceReady() { window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail); } function gotFS(
gotFileWriter
function onDeviceReady() {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}
function gotFS(fileSystem) {
fileSystem.root.getFile("readme.txt", {create: true, exclusive: false}, gotFileEntry, fail);
}
function gotFileEntry(fileEntry) {
fileEntry.createWriter(gotFileWriter, fail);
}
function gotFileWriter(writer) {
writer.onwriteend = function(evt) {
// Read the file after writing
};
writer.write("some sample text");
}
function fail(error) {
console.log(error.code);
}
文档完整示例中的FileReader需要一个文件
对象来读取某些内容(gotFileWriter方法缺少引用)。但是,大多数读取文件的异步过程与写入文件类似
如果我想在写入文件后读取它,我是否必须通过调用window.requestFileSystem(LocalFileSystem.PERSISTENT,0,gotFS,fail)再次启动整个异步进程在onwriteend
函数中的code>?以及调用fileEntry.file()
的另一个gotFileEntry
方法?或者有没有一种方法可以直接从gotFileWriter
方法中获取file
对象,而不必重复这些步骤
有人知道最快的方法吗?在启动应用程序时使用此功能。
它将读取和写入文件。试试看
function onDeviceReady() {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, fail);
window.resolveLocalFileSystemURI("file:///example.txt", onResolveSuccess, fail);
var isApp = 'yes';
var root = this;
cb = window.plugins.childBrowser;
call();
}
function onFileSystemSuccess(fileSystem) {
console.log(fileSystem.name);
}
function onResolveSuccess(fileEntry) {
console.log(fileEntry.name);
}
function fail(evt) {
console.log(evt.target.error.code);
}
function call(){
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, successDirectoryReader, null);
}
function successDirectoryReader(fileSystem)
{
try {
var dirEntry = fileSystem.root;
var directoryReader = dirEntry.createReader();
directoryReader.readEntries(success,failure);
} catch (e) {
alert(e);
}
}
创建、读取、编辑和删除示例
在展示示例之前,我想说我使用了externalDataDirectory
(file:///data/user/0/com.adobe.phonegap.app/files/)在示例中,由于此目录是公用的,因此您可以在手机上检查该文件的存在和更改。生成的文件应位于内部存储器中
这些例子是为了相互跟进
生成文件读取生成的文件编辑生成的文件删除生成的文件
如何编写文件的示例:
//
//resolve url for directory entry for putting in new file
//cordova.file.externalDataDirectory / file:///data/user/0/com.adobe.phonegap.app/files/
//
window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function success(dataDirEntry) {
//create new file
dataDirEntry.getFile("test.txt", { create: true, exclusive: false }, function (newFileEntry) {
// Create a FileWriter object for our newFileEntry
newFileEntry.createWriter(function (fileWriter) {
fileWriter.onwriteend = function () {
console.log("Successful file write...");
};
fileWriter.onerror = function (e) {
console.log("Failed file write: " + JSON.stringify(e));
};
//type can be 'text/plain' or newFileEntry.type for .txt
var blob = new Blob(['test it works'], { type: newFileEntry.type });
//console.log(blob);
fileWriter.write(blob);
});
}, function(e) { console.log('creating file error'); console.log(e); });
}, function error(e) { console.log('resolving directory error'); console.log(e); });
window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory+'test.txt', function success(fileEntry) {
//read file
fileEntry.file(function (file) {
var reader = new FileReader();
reader.onloadend = function() {
var fileData = this.result;
console.log(fileData);
};
reader.readAsText(file);
}, function(e) { console.log('opening file error'); console.log(e); });
}, function error(e) { console.log('resolving directory error'); console.log(e); });
window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory+'test.txt', function success(fileEntry) {
fileEntry.remove(function() {
console.log('file deleted');
}, function(e) {
console.log('file not deleted');
console.log(e);
});
});
如何读取文件的示例:
//
//resolve url for directory entry for putting in new file
//cordova.file.externalDataDirectory / file:///data/user/0/com.adobe.phonegap.app/files/
//
window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function success(dataDirEntry) {
//create new file
dataDirEntry.getFile("test.txt", { create: true, exclusive: false }, function (newFileEntry) {
// Create a FileWriter object for our newFileEntry
newFileEntry.createWriter(function (fileWriter) {
fileWriter.onwriteend = function () {
console.log("Successful file write...");
};
fileWriter.onerror = function (e) {
console.log("Failed file write: " + JSON.stringify(e));
};
//type can be 'text/plain' or newFileEntry.type for .txt
var blob = new Blob(['test it works'], { type: newFileEntry.type });
//console.log(blob);
fileWriter.write(blob);
});
}, function(e) { console.log('creating file error'); console.log(e); });
}, function error(e) { console.log('resolving directory error'); console.log(e); });
window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory+'test.txt', function success(fileEntry) {
//read file
fileEntry.file(function (file) {
var reader = new FileReader();
reader.onloadend = function() {
var fileData = this.result;
console.log(fileData);
};
reader.readAsText(file);
}, function(e) { console.log('opening file error'); console.log(e); });
}, function error(e) { console.log('resolving directory error'); console.log(e); });
window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory+'test.txt', function success(fileEntry) {
fileEntry.remove(function() {
console.log('file deleted');
}, function(e) {
console.log('file not deleted');
console.log(e);
});
});
如何编辑文件的示例:
//
//resolve url for directory entry for putting in new file
//cordova.file.externalDataDirectory / file:///data/user/0/com.adobe.phonegap.app/files/
//
window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function success(dataDirEntry) {
//create new file
dataDirEntry.getFile("test.txt", { create: true, exclusive: false }, function (newFileEntry) {
// Create a FileWriter object for our newFileEntry
newFileEntry.createWriter(function (fileWriter) {
fileWriter.onwriteend = function () {
console.log("Successful file write...");
};
fileWriter.onerror = function (e) {
console.log("Failed file write: " + JSON.stringify(e));
};
//type can be 'text/plain' or newFileEntry.type for .txt
var blob = new Blob(['test it works'], { type: newFileEntry.type });
//console.log(blob);
fileWriter.write(blob);
});
}, function(e) { console.log('creating file error'); console.log(e); });
}, function error(e) { console.log('resolving directory error'); console.log(e); });
window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory+'test.txt', function success(fileEntry) {
//read file
fileEntry.file(function (file) {
var reader = new FileReader();
reader.onloadend = function() {
var fileData = this.result;
console.log(fileData);
};
reader.readAsText(file);
}, function(e) { console.log('opening file error'); console.log(e); });
}, function error(e) { console.log('resolving directory error'); console.log(e); });
window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory+'test.txt', function success(fileEntry) {
fileEntry.remove(function() {
console.log('file deleted');
}, function(e) {
console.log('file not deleted');
console.log(e);
});
});
示例中使用了javascript函数replace
。我还没有找到另一种编辑文件的方法
//resolve url for file entry for reading the file
//
window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory+'test.txt', function success(fileEntry) {
//read file
fileEntry.file(function (file) {
var reader = new FileReader();
reader.onloadend = function() {
var fileData = this.result;
console.log(fileData);
//replace test with yes
fileData = fileData.replace('test', 'yes');
// write the edited filedata to the file
// Create a FileWriter object for our fileEntry
fileEntry.createWriter(function (fileWriter) {
fileWriter.onwriteend = function () {
console.log("Successful file write...");
};
fileWriter.onerror = function (e) {
console.log("Failed file write: " + JSON.stringify(e));
};
//type can be 'text/plain' or newFileEntry.type for .txt
var blob = new Blob([fileData], { type: fileEntry.type });
//console.log(blob);
fileWriter.write(blob);
});
};
reader.readAsText(file);
}, function(e) { console.log('opening file error'); console.log(e); });
}, function error(e) { console.log('resolving directory error'); console.log(e); });
如何删除文件的示例:
//
//resolve url for directory entry for putting in new file
//cordova.file.externalDataDirectory / file:///data/user/0/com.adobe.phonegap.app/files/
//
window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function success(dataDirEntry) {
//create new file
dataDirEntry.getFile("test.txt", { create: true, exclusive: false }, function (newFileEntry) {
// Create a FileWriter object for our newFileEntry
newFileEntry.createWriter(function (fileWriter) {
fileWriter.onwriteend = function () {
console.log("Successful file write...");
};
fileWriter.onerror = function (e) {
console.log("Failed file write: " + JSON.stringify(e));
};
//type can be 'text/plain' or newFileEntry.type for .txt
var blob = new Blob(['test it works'], { type: newFileEntry.type });
//console.log(blob);
fileWriter.write(blob);
});
}, function(e) { console.log('creating file error'); console.log(e); });
}, function error(e) { console.log('resolving directory error'); console.log(e); });
window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory+'test.txt', function success(fileEntry) {
//read file
fileEntry.file(function (file) {
var reader = new FileReader();
reader.onloadend = function() {
var fileData = this.result;
console.log(fileData);
};
reader.readAsText(file);
}, function(e) { console.log('opening file error'); console.log(e); });
}, function error(e) { console.log('resolving directory error'); console.log(e); });
window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory+'test.txt', function success(fileEntry) {
fileEntry.remove(function() {
console.log('file deleted');
}, function(e) {
console.log('file not deleted');
console.log(e);
});
});
@JasonMichael那么在你的帖子里你说它会读写什么呢。这就是为什么。@Madurai:嘿,这个函数是在读取后关闭文件还是有代码?我想避免内存浪费。如何写入文件?