今天写一下ngCordova插件中File插件的使用
虽然JavaScript也有自己操作文件的方法(FileSystemObject类),但是由于Android和IOS的文件目录结构不同,操作文件不如用封装好方法的File插件方便。

插件安装:cordova plugin add org.apache.cordova.file
插件安装完成后,我们要了解Android和IOS在Cordova中的系统目录是什么样的




IOS系统的目录结构




Android系统的目录结构

通过上面的目录结构我们可以按照左侧的Device Path比对出cordova的相对的目录名称。举例说明,在IOS系统中的Device Path为"/var/mobile/Applications/<UUID>/",那么cordova的目录就是cordova.file.applicationStorageDirectory;在Android系统中的"<sdcard>/"也就是Android的sdcard根目录,cordova的目录是cordova.file.externalRootDirectory,比照着目录结构,我们可以把我们想要的存储目录结构转化为cordova的目录。

方法说明:

  1. getFreeDiskSpace()

拿到设备上空的存储空间


用法:
   $cordovaFile.getFreeDiskSpace()
   .then(function (success) {
      // success in kilobytes
   }, function (error) {
       // error
   });


  1. checkDir(path, directory)

检查在具体的路径中是否存在某个文件夹
path为cordova的目录结构,directory为所检查的文件夹


用法:
 $cordovaFile.checkDir(cordova.file.dataDirectory, "newdir")
 .then(function (success) {
   // success
 }, function (error) {
   // error
   alert(angular.toJson(error));
 });
上面的代码就是在检查在Android中的"files/"路径下或IOS中的"NoCloud/"路径下检查是否存在一个叫做"newdir"的文件夹
若存在则进入function(success){}中,若不存在则进入function(error){}中,由于error是一个Object类的对象,所以要转换成Json数据再打印,此时打印出的error就是未找到文件夹的错误信息码


  1. createDir(path, directory, replace)

在具体路径中创建某个文件夹
path为cordova的目录结构,directory为建立文件夹名称,replace为布尔型值,若为true则覆盖同名文件夹,若为false则不覆盖

用法:
$cordovaFile.createDir(cordova.file.dataDirectory, "newdir", false)
 .then(function (success) {
   // success
 }, function (error) {
   // error
 });
以上代码就是在Android中的"files/"路径下或IOS中的"NoCloud/"路径下创建叫做"newdir"的文件夹,且不可覆盖同名文件夹


  1. checkFile(path, file)

在具体路径检查某个文件是否存在
path为cordova的目录结构,directory为所检查的文件名称


$cordovaFile.checkFile(cordova.file.dataDirectory, "thedir/file.txt")
  .then(function (success) {
    // success
  }, function (error) {
    // error
  });
用法整体和checkDir()相似,这里要说的是,checkDir()方法和checkFile方法中的directory参数,这个参数可以是一个路径,以上面代码为例,就是检查Android中的"files/"路径下或IOS中的"NoCloud/"路径下是否有一个在thedir文件夹下的file.txt文件,找到进入success,找不到进入error


  1. createFile(path, file, replace)

在指定路径创建某文件
整体用法参照createDir()


$cordovaFile.removeFile(cordova.file.dataDirectory, "some_file.txt")
 .then(function (success) {
   // success
 }, function (error) {
   // error
 });


  1. removeRecursively(path, directory)

在指定路径删除包括文件夹和文件夹下的所有文件
根据参数,用法和前面类似


$cordovaFile.removeRecursively(cordova.file.dataDirectory, "")
 .then(function (success) {
   // success
 }, function (error) {
   // error
 });


  1. removeDir(path, directory)

在指定路径删除某文件夹


$cordovaFile.removeDir(cordova.file.dataDirectory, "some_dir")
.then(function (success) {
  // success
}, function (error) {
  // error
});


  1. removeFile(path, file)

在指定路径删除某文件


$cordovaFile.removeFile(cordova.file.dataDirectory, "some_file.txt")
.then(function (success) {
  // success
}, function (error) {
  // error
});


  1. writeFile(path, file, data, replace)

在指定路径向文件中写数据,data参数可以是text或data,相当于直接创建一个写了数据的文件


$cordovaFile.writeFile(cordova.file.dataDirectory, "file.txt", "text", true)
 .then(function (success) {
   // success
 }, function (error) {
   // error
 });


  1. writeExistingFile(path, file, data)

在指定路径下向一个已经存在的文件写数据,写入数据为text或data

$cordovaFile.writeExistingFile(cordova.file.dataDirectory, "file.txt", "text")
.then(function (success) {
  // success
}, function (error) {
  // error
});

通过上面说的这些方法,可以知道File插件的方法的使用模式,下面的方法与上面用法类似,不再详细说明

  1. readAsText(path, file)

以文本的方式读文件

  1. readAsDataURL(path, file)

以数据Url的形式读文件

  1. readAsBinaryString(path, file)

以二进制字符串的形式读文件

  1. readAsArrayBuffer(path, file)

以数组buffer的形式读文件

  1. moveDir(path, directory, newPath, newDirectory)

将文件夹从旧路径移动到新路径,其中newPath为新路径,newDirectory为新名称

  1. moveFile(path, file, newPath, newFile)

将文件从旧路径移动到新路径

  1. copyDir(path, directory, newPath, newDirectory)

将文件夹复制到新路径

  1. copyFile(path, file, newPath, newFile)

将文件复制到新路径
以上就是ngCordova插件中File插件的使用方法