使用Cordova文件插件写入和读取文件

时间:2019-05-14 08:23:26

标签: cordova ionic-framework cordova-plugins

我正在尝试创建一个ionicv1应用程序,该应用程序包括填写表单并将其保存到文件中,并且每次将新内容写入文件时,都会使用cordova文件插件读取文件。我正在尝试使用these个示例,但它们对我不起作用,我也不知道为什么。

这是我的文件写入功能:

function writeToFile(fileName, data) {
  data = JSON.stringify(data, null, '\t');
  window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function(directorEntry) {
    directorEntry.getFile(filename, { create: true }, function(fileEntry) {
      fileEntry.createWriter(function(fileWriter) {

        fileWriter.onwriteend = function(e) /* E */ {
          //Success callback
          document.getElementById("testwrite").innerHTML = "Write successful";
        };

        fileWriter.onerror = function(e) /* E */ {
          //Error callback
          document.getElementById("testwrite").innerHTML = "Write unsuccessful";
        };

        var blob = new Blob([data], { type: 'text/plain' });
        fileWriter.write(blob);
      });
    });
  });
}

它在我的页面上没有显示“写入成功”或“写入不成功”,因此显然由于某种原因它并没有实现那么远,但是writeToFile函数本身正在被调用。 我在另一个函数saveJson中调用此函数,当在表单上按Submit时将调用该函数。

function saveJson() {
  var exampleArray = {
    exampleX: {
      'example1' : 'exampleValue1',
      'example2' : 'exampleValue2'
    }
  }

  console.log(exampleArray);
  writeToFile('jsonfile.json', exampleArray);
}

因此我无法写入文件,但是它也无法识别我的读取功能,尽管那也许是因为文件不是一开始创建的。

这里是阅读功能:

function readFromFile(filename, cb) {
  var pathToFile = cordova.file.externalDataDirectory + filename;
  window.resolveLocalFileSystemURL(pathToFile, function(fileEntry) {
    fileEntry.file(function(file) {
      var reader = new FileReader();

      reader.onloadend = function(e) /* E */ {
        //Success callback
        document.getElementById("testread").innerHTML = "Read successful";
      }

      reader.onerror = function(e) /* E */ {
        //Error callback
        document.getElementById("testread").innerHTML = "Read unsuccessful";
      }

      reader.readAsText(file);
    });
  });
}

被这样称呼的:

var shiftData;
readFromFile('shifts.json', function(data) {
  shiftData = data;
});

同样,它不会在我的页面上显示“读取成功”或“读取失败”,但是如果写作可行,我可能会自行解决。

所有测试都是在我的实际Android设备Pixel 2 XL上进行的,而不是仿真程序,尽管那没有什么不同。

1 个答案:

答案 0 :(得分:0)

我最终使用了一个不同的教程,并做了一些改动。

在我的app.js文件(位于HTML页面顶部)中,添加以下代码:

var jsonFile;

document.addEventListener('deviceready', onDeviceReady, false);
function onDeviceReady() {
  window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function(dir) {
    dir.getFile('example.json', { create: true }, function(file) {
      jsonFile = file;
    });
  });
}

哪个给了我一个文件,可以使用jsonFile变量在其他JS文件中加载(在我的body标签末尾之前的底部加载)。

我的writeToFile函数现在看起来像这样:

function writeToFile(data) {
  if (jsonFile == undefined) {
    alert("File is undefined")
  } else {
    var jsonData = JSON.stringify(data);
    jsonFile.createWriter(function(fileWriter) {

      fileWriter.seek(fileWriter.length);

      var blob = new Blob([jsonData], { type: 'text/plain' });
      fileWriter.write(blob);
      alert("writeToFile is successful!";)

    });
  }
}
  • 首先,我们检查是否已定义文件,但应该以防万一。

  • 然后我们将数据转换为有效的JSON数据。

  • 我们创建一个fileWriter并使用seek将数据附加到文件末尾。

  • 我们创建一个blob来放置JSON并将该blob写入文件中。