在javascript中将字符串前置到文件中?

在javascript中将字符串前置到文件中?,javascript,firefox-addon-sdk,Javascript,Firefox Addon Sdk,我的js生活在FF插件中,因此可以访问prilivaged api。目前,我可以将字符串附加到文件或截断文件并写入字符串 但是,有没有一种简单的方法可以将字符串前置到文件中?因此,我的字符串被放置在文件的开头,然后现有内容随之出现 新文件 附加到文件 main.js目录 Cu.import("resource://gre/modules/NetUtil.jsm"); Cu.import("resource://gre/modules/FileUtils.jsm"); var filename

我的js生活在FF插件中,因此可以访问prilivaged api。目前,我可以将字符串附加到文件或截断文件并写入字符串

但是,有没有一种简单的方法可以将字符串前置到文件中?因此,我的字符串被放置在文件的开头,然后现有内容随之出现

新文件 附加到文件 main.js目录

Cu.import("resource://gre/modules/NetUtil.jsm");
Cu.import("resource://gre/modules/FileUtils.jsm");

var filename = 'test.txt',
    ostream,
    string = 'test content',
    file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
    file.initWithPath('/home/user/');
    file.append(fileName);

try {

    if (file.exists() === false) {
        file.create(Ci.nsIFile.NORMAL_FILE_TYPE, 420);
    }

    ostream = FileUtils.openSafeFileOutputStream(file, FileUtils.MODE_WRONLY | FileUtils.MODE_CREATE | FileUtils.MODE_TRUNCATE);
    var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
    converter.charset = "UTF-8";
    var istream = converter.convertToInputStream(combinedString);

    NetUtil.asyncCopy(istream, ostream, function (status) {

        if (!components.isSuccessCode(status)) {
            console.log('success: ' + file.path);
        } else {
            console.log('error: ' + file.path);
        }
    });
} catch (e) {
    return false;
}
最后使用了OS.File,读取文件内容,将字符串前置到数据,然后将组合数据写回文件

let promise = OS.File.read(filePath);
promise = promise.then(function onSuccess(contents) {
  let text = new TextDecoder().decode(contents);

  combinedString = combinedString + '\n\n' + text;

  if (System.getPlatform().indexOf('win') >= 0)
        combinedString = combinedString.replace(/[\n]/g, '\r\n');

  let encodedArray = new TextEncoder().encode(combinedString);

  var promise = OS.File.writeAtomic(filePath, encodedArray);
  promise.then(
    function() {
      console.log('success');
    },
    function(ex) {
      console.log('error');
    }
  );
  return true;
}, 
function onError(reason) {
  if (System.getPlatform().indexOf('win') >= 0)
    combinedString = combinedString.replace(/[\n]/g, '\r\n');
    let encodedArray = new TextEncoder().encode(combinedString);
    if (reason.becauseNoSuchFile()) {
      var promise = OS.File.writeAtomic(filePath, encodedArray);
      promise.then(
         function() {
          console.log('success');
        },
        function(ex) {
          console.log('error');
        }
      );
    return false;
  }
});

你想要达到什么效果?为什么不创建一个事件监听器,因为调用一个而不是另一个的原因,并在监听器中简单地调用它呢?我提供了各种方法来向文件添加文本,例如截断、预结束和追加。
Cu.import("resource://gre/modules/NetUtil.jsm");
Cu.import("resource://gre/modules/FileUtils.jsm");

var filename = 'test.txt',
    ostream,
    string = 'test content',
    file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
    file.initWithPath('/home/user/');
    file.append(fileName);

try {

    if (file.exists() === false) {
        file.create(Ci.nsIFile.NORMAL_FILE_TYPE, 420);
    }

    ostream = FileUtils.openSafeFileOutputStream(file, FileUtils.MODE_WRONLY | FileUtils.MODE_CREATE | FileUtils.MODE_TRUNCATE);
    var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
    converter.charset = "UTF-8";
    var istream = converter.convertToInputStream(combinedString);

    NetUtil.asyncCopy(istream, ostream, function (status) {

        if (!components.isSuccessCode(status)) {
            console.log('success: ' + file.path);
        } else {
            console.log('error: ' + file.path);
        }
    });
} catch (e) {
    return false;
}
let promise = OS.File.read(filePath);
promise = promise.then(function onSuccess(contents) {
  let text = new TextDecoder().decode(contents);

  combinedString = combinedString + '\n\n' + text;

  if (System.getPlatform().indexOf('win') >= 0)
        combinedString = combinedString.replace(/[\n]/g, '\r\n');

  let encodedArray = new TextEncoder().encode(combinedString);

  var promise = OS.File.writeAtomic(filePath, encodedArray);
  promise.then(
    function() {
      console.log('success');
    },
    function(ex) {
      console.log('error');
    }
  );
  return true;
}, 
function onError(reason) {
  if (System.getPlatform().indexOf('win') >= 0)
    combinedString = combinedString.replace(/[\n]/g, '\r\n');
    let encodedArray = new TextEncoder().encode(combinedString);
    if (reason.becauseNoSuchFile()) {
      var promise = OS.File.writeAtomic(filePath, encodedArray);
      promise.then(
         function() {
          console.log('success');
        },
        function(ex) {
          console.log('error');
        }
      );
    return false;
  }
});