如何用XUL读/写文件?

时间:2012-03-12 12:59:05

标签: javascript file-io firefox-addon xul xpcom

我正在使用xul来编写firefox扩展,因此我需要从本地文件读取/写入。如何在以下目录中创建示例文件“temp.txt” “c:/ data”

3 个答案:

答案 0 :(得分:6)

XUL是一种标记语言,您可以使用它来创建用户界面。要像写入文件那样使用XPCOM。其他所有内容都可以在文档中找到:

一般文档:FileUtils.jsmNetUtil.jsmFile I/O code snippets

答案 1 :(得分:4)

我为那些感兴趣的人找到了解决方案:

getLocalDirectory : function() { 
    let directoryService = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties); 
    let localDir = directoryService.get("ProfD", Ci.nsIFile); 
    localDir.append("FolderName"); 
    if (!localDir.exists() || !localDir.isDirectory())  
        localDir.create(Ci.nsIFile.DIRECTORY_TYPE, 0774); 
    return localDir; 
}, 

writeFile: function(data) {
    let myFile = lbbs.files.getLocalDirectory(); 
    myFile.append("FileName.txt"); 
    if ( myFile.exists() == false ) 
         myFile.create(Ci.nsIFile.NORMAL_FILE_TYPE, 0774); 
    Components.utils.import("resource://gre/modules/NetUtil.jsm"); 
    Components.utils.import("resource://gre/modules/FileUtils.jsm"); 
    var ostream = FileUtils.openSafeFileOutputStream(myFile) 
    var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]. 
    createInstance(Components.interfaces.nsIScriptableUnicodeConverter); 
    converter.charset = "UTF-8"; 
    var istream = converter.convertToInputStream(data); 
    NetUtil.asyncCopy(istream, ostream, function(status) { 
        if (!Components.isSuccessCode(status))  
            return; 
    });
},

readFile: function() {
    let myFile = lbbs.files.getLocalDirectory(); 
    myFile.append("FileName.txt"); 
    if (myFile.exists() == false) 
        myFile.create(Ci.nsIFile.NORMAL_FILE_TYPE, 0774); 
    var data = ""; 
    var fstream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream); 
    var cstream = Components.classes["@mozilla.org/intl/converter-input-stream;1"].createInstance(Components.interfaces.nsIConverterInputStream); 
    fstream.init(myFile, -1, 0, 0); 
    cstream.init(fstream, "UTF-8", 0, 0); 
    let (str = {}) { 
        let read = 0; 
        do { 
            read = cstream.readString(0xffffffff, str); 
            data += str.value; 
        } while (read != 0); 
    } 
    cstream.close();  
    return data; 
},


该文件现在在以下位置创建:%USER_PROFILE%\ AppData \ Roaming \ Mozilla \ FireFox \ Profiles \ aamu4bzq.default \ FolderName \ FileName.txt

答案 2 :(得分:1)

我认为在应用程序基目录之外创建文件夹时会出现问题 例如: - 如果要在C:\ TEMP中创建文件夹,则可能会失败