我的Firefox扩展中有一个像数据集一样的hashTable,我愿意将它保存在一个简单的文本文件中。我一直在阅读很多示例代码,但这些代码都不适用于我。例如,1,2。我是开发Firefox扩展的初学者,在我看来,写入文件的语法有点复杂。谁能给我一个有效的例子?顺便说一下,我正在使用unix。因为我看到了写一个文件的例子,他们正在使用Windows系统调用。
答案 0 :(得分:1)
这是一个将名为myfile.txt的文件写入firefox配置文件目录的示例代码:
var txt = "my file contents";
var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile);
file.append("myfile.txt");
var fs = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
fs.init(file, 0x02 | 0x08 | 0x20, 0664, 0); // write, create, truncate
fs.write(txt, txt.length);
fs.close();
如果您使用的是Firefox Addon SDK(jetpack),则需要对其进行一些修改。
var {Cc, Ci} = require("chrome");
var txt = "my file contents";
var file = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("ProfD", Ci.nsIFile);
file.append("myfile.txt");
var fs = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
fs.init(file, 0x02 | 0x08 | 0x20, 0664, 0); // write, create, truncate
fs.write(txt, txt.length);
fs.close();
答案 1 :(得分:0)
这是更简单直接的方式:
Components.utils.import("resource://gre/modules/osfile.jsm");
// Saving the pointed filename into your Firefox profile
let whereToSave = OS.Path.join(OS.Constants.Path.profileDir, "YOUR-FILENAME.txt");
// Convert your "hash table" to a Typed Array[1]
let dataToSave = hashTableAsArrayBufferView;
// Check MDN[2] for writeAtomic() details
OS.File.writeAtomic(whereToSave, dataToSave).then(function(aResult) {
// Write operation finished
...
}, Components.utils.reportError);
[1]:https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView