read and write to chrome file using XPCOM components.

// To perform local file IO from JavaScript in Mozilla, use the XPCOM
nsIFile file IO library. See the above references for more details.

function xpcomFileWrite(filePath, content) {
if (Components) // XPConnect ‘Components’ object check.
try {

// Get file component.
var file = Components.classes[“;1”]


if (!file.exists()) {
alert(‘Creating new file ‘ + filePath);


create(type, permissions)

This function will create a new file or directory in the file system.
Any nodes that have not been created or resolved, will be. If the file
or directory already exists create() will return


type: This specifies the type of file system object to be made. The
only two types at this time are file and directory/folder which are:


If the type is unrecongnized, we will return an error

permissions: The unix style octal permissions. This may be ignored on
systems that do not need to do permissions. In general, permissions are
based on three octal numbers. The first specifies the access for the
user, the second for the group and the last for others.

0 – No permission to read, write or execute.
1 – Execute permission only.
2 – Write permission only.
3 – Execute and write permission.
4 – Read permission only.
5 – Execute and read permission.
6 – Write and read permission.
7 – Execute, write and read permission.

User read/write, group read, others read would be 644


file.create(0x00, 0644);

// Write with nsIFileOutputStream.

var outputStream = Components.classes


init(), opens a file for reading, writing, or both.


1. The path name of the file to be opened

2. The file status IO flag. It is a bitwise OR of the following
bit flags (only one of the first three flags below may be used):

0x01 – Open for reading only.
0x02 – Open for writing only.
0x04 – Open for reading and writing.
0x08 – If the file does not exist, the file is created.
If the file exists, this flag has no effect.
0x10 – If set, each write will wait for both the file
data and file status to be physically updated.
0x20 – The file pointer is set to the end of the file
prior to each write.
0x40 – If the file exists, its length is truncated to 0.
0x80 – If the file does not exist, the file is created.

If the file already exists, no action and NULL is returned.

3. The access permission bits of the file ‘mode’.
CAVEAT: ‘mode’ is currently only applicable on UNIX platforms.
The ‘mode’ argument may be ignored on other platforms.

00400 – Read by owner.
00200 – Write by owner.
00100 – Execute (search if a directory) by owner.
00040 – Read by group.
00020 – Write by group.
00010 – Execute by group.
00004 – Read by others.
00002 – Write by others
00001 – Execute by others.

4. Behavior flags specifying various behaviors of the class
(currently not supported).


outputStream.init(file, 0x20 | 0x02, 00004,
outputStream.write(content, content.length);
return true;
catch(e) {
return false;
return false;
if (xpcomFileWrite(‘D:\\My Web
Pages\\test.html’, ‘<html><head><\/head><body><h2>Hello World!
<\/h2><\/body><\/html>’))‘file:\/\/\/D:\\My Web
Pages\\test.html’, ‘testWindow’, ‘left=10,top=305,width=500,height=200’)

function xpcomFileRead(filePath) {
if (Components)
try {“UniversalXPConnect”);
var file = Components.classes[“;1”]
if (!file.exists()) {
alert(‘File does not exist’);
return false;
var inputStream = Components.classes[“;1”]
inputStream.init(file, 0x01, 00004, null);
var sInputStream = Components.classes
catch(e) {
return false;
return false;
if ((output = xpcomFileRead(‘D:\\My Web Pages\\test.html’)))
document.aForm.aTextarea.value = output;

technorati tags:, , , , , , ,

Blogged with Flock

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: