Cordove File实例Demo
一、cordova.file获取系统目录
- //当前程序的目录
- console.info(cordova.file.applicationDirectory);
- //程序的数据目录
- console.info(cordova.file.applicationStorageDirectory);
- //程序的数据目录
- console.info(cordova.file.dataDirectory);
- //程序的暂存目录
- console.info(cordova.file.cacheDirectory);
- //Android扩展存储应用目录
- console.info(cordova.file.externalApplicationStorageDirectory);
- //Android扩展存储数据目录
- console.info(cordova.file.externalDataDirectory);
- //Android扩展存储缓存目录
- console.info(cordova.file.externalCacheDirectory);
- //Android扩展根目录
- console.info(cordova.file.tempDirectory);
- /**iOS中的目录**/
- //临时目录
- console.info(cordova.file.tempDirectory);
- //云存储目录
- console.info(cordova.file.syncedDataDirectory);
- //文档目录
- console.info(cordova.file.documentsDirectory);
- //共享目录
- console.info(cordova.file.sharedDirectory);
- //file:///android_asset/
- //file:///data/data/io.cordova.myapp84ea27/
- //file:///data/data/io.cordova.myapp84ea27/files/
- //file:///data/data/io.cordova.myapp84ea27/cache/
- //file:///storage/emulated/0/Android/data/io.cordova.myapp84ea27/
- //file:///storage/emulated/0/Android/data/io.cordova.myapp84ea27/files/
- //file:///storage/emulated/0/Android/data/io.cordova.myapp84ea27/cache/
二、沙盒模式下直接操作
window.requestFileSystem(type, size, successCB,errorCB),请求获取配额,在插件中不需要使用requestquota
1.创建文件
- //创建文件
- window.requestFileSystem(LocalFileSystem.PERSISTENT, 1024 * 1024, function (fs) {
- console.log('file system open:' + fs.name);
- console.info(fs);
- fs.root.getFile('test1.txt', {
- create: true,
- exclusive: false
- }, function (fileEntity) {
- console.info(fileEntity);
- console.log('文件地址:' + fileEntity.toURL()); //file:///data/data/io.cordova.myapp84ea27/files/files/test1.txt
- // fileEntry.name == 'someFile.txt'
- // fileEntry.fullPath == '/someFile.txt'
- writeFile(fileEntity, "中文内容");
- });
- });
2.写入文件
- //写入文件
- function writeFile(fileEntry, dataObj) {
- fileEntry.createWriter(function (fileWriter) {
- //写入结束
- fileWriter.onwriteend = function () {
- console.log('写入文件成功');
- //读取内容
- readFile(fileEntry);
- }
- fileWriter.onerror = function (e) {
- console.log('写入文件失败:' + e.toString());
- }
- if (!dataObj) {
- dataObj = new Blob(['some file data'], { type: 'text/plain' });
- }
- fileWriter.write(dataObj);
- });
- }
3.读取文件
- //读取文件内容
- function readFile(fileEntry) {
- fileEntry.file(function (file) {
- var reader = new FileReader();
- reader.onloadend = function () {
- console.log('读取文件成功:' + reader.result);
- //显示文件
- console.info(fileEntry.fullPath);
- }
- reader.readAsText(file);
- }, function (err) {
- console.info('读取文件失败');
- });
- }
4.下载图片,并显示
下载:
- window.requestFileSystem(window.PERSISTENT, 5 * 1024 * 1024, function (fs) {
- getSampleFile(fs.root);
- }, errorHandle)
- function getSampleFile(dirEntry) {
- console.info(dirEntry);
- //1.请求png 图片
- var xhr = new XMLHttpRequest();
- xhr.open('GET', 'http://cordova.apache.org/static/img/cordova_bot.png', true);
- xhr.responseType = 'blob';
- xhr.onload = function () {
- if (this.status == 200) {
- var blob = new Blob([this.response], { type: 'image/png' });
- //保存
- saveFile(dirEntry, blob, 'downloadImage.png');
- }
- }
- xhr.send();
- }
保存:
- //保存到本地
- function saveFile(dirEntry, blob, filename) {
- console.info(blob);
- //创建文件
- dirEntry.getFile(filename, { create: true }, function (fileEntry) {
- fileEntry.createWriter(function (fileWriter) {
- fileWriter.onwriteend = function () {
- console.log('写入文件成功');
- if (blob.type == 'image/png') {
- readBinaryFile(fileEntry);
- } else {
- console.error(blob);
- }
- }
- fileWriter.onerror = function (err) {
- console.error('写入文件失败:' + err.toString());
- }
- fileWriter.write(blob);
- });
- }, errorHandle);
- }
读取、显示:fileEntry.toURL() 可以直接作为src显示。
- //读取二进制文件
- function readBinaryFile(fileEntry) {
- fileEntry.file(function (file) {
- var reader = new FileReader();
- reader.onloadend = function () {
- //显示图片文件
- console.info(fileEntry.fullPath + ':' + reader.result);
- var blob = new Blob([new Uint8Array(reader.result)], { type: 'image/png' });
- $scope.imgOne = window.URL.createObjectURL(blob);
- $scope.$apply();
- }
- reader.readAsArrayBuffer(file);
- }, errorHandle);
- //直接显示图片
- $scope.imgTwo = fileEntry.toURL();
- $scope.$apply();
- }
5.读取文件夹中内容:
- //显示根目录内容
- window.requestFileSystem(LocalFileSystem.PERSISTENT, 1024 * 1024, function (fs) {
- //显示根目录下的内容
- var dirReader = fs.root.createReader();
- var entries = [];
- var readEntries = function () {
- //DirectoryReader.readEntries() 方法一次读取内容的个数不一定
- //返回FileEntry数组
- dirReader.readEntries(function (results) {
- if (!results.length) {
- showEntries(entries.sort());
- } else {
- entries = entries.concat(toArray(results));
- readEntries();
- }
- }, errorHandler);
- }
- readEntries();
- });
- function errorHandler(err) {
- console.info(err);
- }
- function toArray(list) {
- return Array.prototype.slice.call(list || [], 0);
- }
- //显示读取结果
- function showEntries(entries) {
- console.info(entries);
- }