前面简单的说了一下关于XPCOM的概念以及如何使用XPCOM,现在我们就来看看一下一个社区里面封装的XPCOM类,这个类可以很好的提供给开发人员进行文件的创建,读,写和删除等操作。
有了这个类之后,我们就可以很简单的进行文件的读写操作,具体代码可以看下面。
ReadFile:function(filename)
{
var path = “file path”;
var file = FileIO.Open(path);
var content=FileIO.Read(file);
return content;
}
同样,在写文件的时候,也可以使用我们现有的类进行文件写入,但是值得注意的是,一个好的方法是在写文件的时候判断是否存在这个文件,如果存在就写,如果不存在就创建一个之后再写,以避免一些错误。示例代码如下。
WriteLines:function(content,filename)
{
CreateFile(filename);
var file = FileIO.Open(path);
FileIO.Write(file,content);
}
其中,创建文件的CreateFile可以编写如下,这里我的代码做一个参考。
CreateFile:function(filename)
{
try
{
//create a local file
var file = FileIO.Open(path);
if(!file.exists())
{
var fr = GetProfileDir(); //这个函数有点重要
fr.append(filename);
fr.create(file.NORMAL_FILE_TYPE, 0666);
return false;
}
else
{
//file exists
return true;
}
}
catch(e)
{
return false;
}
}
从上面代码我们可以看出,在这里面有一个非常重要的函数,即GetProfileDir,我们首先需要获取路径,才能够用append方法去创建一个文件。而GetProfileDir方法是用的是XPCOM进行获取的,通常情况下获取的是Firefox的路径,可能不同的浏览器或者不同的版本会有所区别,其中GetProfileDir方法可以编写如下。
GetProfileDir : function()
{
//get the profile dir and add new file
var file = Components.classes["@mozilla.org/file/directory_service;1"].
getService(Components.interfaces.nsIProperties).
get(“ProfD”, Components.interfaces.nsIFile);
file.append(AppConst.CONFIGFILEFOLDER);
if (!file.exists()) file.create(0×01, 0750);
return file;
}
要知道上面的函数为什么这样写,就要去看directory_service的XPCOM提供的API接口了,只有了解了接口,才能够知道返回的是什么内容,或者,你也可以使用alert去弹出内容。
这一节说明很少,代码有点多,主要是基于对XPCOM有一定的理解,如果理解了50%,这里写的应该不难理解,最后奉上这个File类。
[...] Firefox Add-on – XPCOM的File类 [...]