To be able to do any operation with directory/file in Apache Cordova, we need to access and get hold of the directory/file entry first. Then only after that we will be able to do any directory/file operation. This could be a very different approach from other frameworks that we have used before in dealing with file and file system.
Creating and Writing File
Let start with an example to create and write a file:
window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function (dirEntry) {
console.log("got directory entry", dirEntry);
dirEntry.getFile("myFilename.txt", { create: true },
// getFile() success
function (fileEntry) {
console.log("got file entry", fileEntry);
fileEntry.createWriter(
// createWriter() success
function (fileWriter) {
fileWriter.onwriteend = function (e) {
console.log('write is successful');
. . .
};
fileWriter.onerror = function (e) {
console.log('write is failed', e);
. . .
};
var blob = new Blob(['. . . some text . . .'], { type: 'text/plain' });
fileWriter.write(blob);
},
// createWriter() error
function (error) {
. . .
}
);
},
// getFile() error
function (error) {
. . .
}
);
});
In the example above, we use
resolveLocalFileSystemURL() function to get a directory or file entry from a directory/file system path (i.e.
cordova.file.dataDirectory).
resolveLocalFileSystemURL() has two parameters:
- the first parameter is a directory or file path
- the second one is the callback function to be executed once it succeed. A directory or file reference entry object is passed to the callback function.
Once we have hold of the file or directory entry object, we can do a number of operations such as creating, writing, reading, copying, moving, renaming or deleting the file. In this case, we want to create a new file and write into it. To do this, we need to call
getFile() function first. The function has four parameters:
- the filename or file path
- function options (optional parameter). It has two properties with boolean values, namely;
create and
exclusive.
create: true will create a file if it does not exist. To make the function throws an error if the file exists, set
exclusive: true.
- on success callback function, passing a file reference entry object
- on error callback function (optional parameter), an error object is passed to the callback
Then after we get the file entry object, we call
createWriter() function that will create a file writer object once successful. Next we call its
write() function. The file writer object also has
onwriteend() and
onerror() callback functions.
Reading File
window.resolveLocalFileSystemURL(myFilePath, function (dirEntry) {
fileEntry.file(
// success
function(file) {
var reader = new FileReader();
reader.onloadend = function(e) {
console.log('file is read');
. . .
};
reader.readAsText(file);
},
// error
function (error) {
. . .
}
);
});
In the example, we see that after we get a file reference entry object, we use
file() method in order to create a file object of the intended file to be passed to
FileReader readAsText() function.
Deleting File
window.resolveLocalFileSystemURL(myFilePath,
function (fileEntry) {
fileEntry.remove(
// success
function () {
console.log('file is removed');
. . .
},
// error
function (error) {
. . .
}
);
}
);
In this last example, we call file entry object's
remove() function to delete a file.