mozilla

Compare Revisions

File I/O

Change Revisions

Revision 516521:

Revision 516521 by Noitidart on

Revision 520753:

Revision 520753 by Noitidart on

Title:
File I/O
File I/O
Slug:
Mozilla/Add-ons/Code_snippets/File_I_O
Mozilla/Add-ons/Code_snippets/File_I_O
Tags:
"Files", "Extensions", "Add-ons", "Code snippets", "Streams"
"Files", "Extensions", "Add-ons", "Code snippets", "Streams"
Content:

Revision 516521
Revision 520753
n380      This will allow you to read a file without locking up the Un380      This will allow you to read a file without locking up the U
>I thread.&nbsp; This sample code uses <a href="/en/JavaScript_cod>I thread.&nbsp; This sample code uses <a href="/en/JavaScript_cod
>e_modules/NetUtil.jsm" title="en/JavaScript_code_modules/NetUtil.>e_modules/NetUtil.jsm" title="en/JavaScript_code_modules/NetUtil.
>jsm">NetUtil.jsm</a>. You can pass an {{ interface("nsIFile") }} >jsm">NetUtil.jsm</a>. So therefore the first parameter, file, you
>object directly into <a href="/en/JavaScript_code_modules/NetUtil> can pass an {{ interface("nsIFile") }} object or a string (such 
>.jsm#asyncFetch%28%29" title="https://developer.mozilla.org/en/Ja>as a jar path) See: <a href="/en/JavaScript_code_modules/NetUtil.
>vaScript_code_modules/NetUtil.jsm#asyncFetch()">NetUtil.asyncFetc>jsm#asyncFetch%28%29" title="https://developer.mozilla.org/en/Jav
>h</a>:>aScript_code_modules/NetUtil.jsm#asyncFetch()">NetUtil.asyncFetch
 ></a>:
n451      This function copies all of the data from an input stream tn451      This function copies all of the data from an input stream t
>o a file asyncronously.&nbsp; It takes an {{ interface("nsIInputS>o a file asyncronously. It overwrites the file if it is there, an
>tream") }} and an {{ interface("nsIFile") }} as arguments, and us>d if it is not there it creates a file then writes into it. It ta
>es <a href="/en/JavaScript_code_modules/NetUtil.jsm" title="en/Ja>kes an {{ interface("nsIInputStream") }} and an {{ interface("nsI
>vaScript_code_modules/NetUtil.jsm">NetUtil.jsm</a> and <a href="/>File") }} as arguments, and uses <a href="/en/JavaScript_code_mod
>en/JavaScript_code_modules/FileUtils.jsm" title="en/JavaScript co>ules/NetUtil.jsm" title="en/JavaScript_code_modules/NetUtil.jsm">
>de modules/FileUtils.jsm">FileUtils.jsm</a>. The <code>callback</>NetUtil.jsm</a> and <a href="/en/JavaScript_code_modules/FileUtil
>code> argument is optional.>s.jsm" title="en/JavaScript code modules/FileUtils.jsm">FileUtils
 >.jsm</a>. The <code>callback</code> argument is optional.
n461      Combined Example of Reading and Writing to File (Asyncyronun461      Combined Example of Reading and Writing (Overwriting and Ap
>s)>pend) to File (Asyncyronus)
n467/*start - example usage*/n467var {interfaces: Ci, utils: Cu,    classes: Cc} = Components;
468  var file = FileUtils.getFile("Desk", ["rawr.txt"]); //this gets
> file on desktop named 'rawr.txt' 
469  //can also go: var file = FileUtils.File('C:\\Documents and Set
>tings\\My User Name\\Desktop\\rawr.txt'); 
470 
471  overwriteFile(file, 'blah blah blah', function (status) {
472          Components.utils.reportError('overwrite status == ' + C
>omponents.isSuccessCode(status)); 
473  });
474 
475  readFile(file, function (dataReadFromFile, status) {
476           Components.utils.reportError('file read status == ' + 
>Components.isSuccessCode(status)); 
477           Components.utils.reportError('contents of file is:\n' 
>+ dataReadFromFile); 
478  });
479/*end - example usage*/
480 
481 
482 
483 
484 
485Components.utils.import("resource://gre/modules/FileUtils.jsm");468Cu.import("resource://gre/modules/FileUtils.jsm");
486Components.utils.import("resource://gre/modules/NetUtil.jsm");469Cu.import("resource://gre/modules/NetUtil.jsm");
470 
487function overwriteFile(nsiFile, data, callback) {471function writeFile(nsiFile, data, overwrite, callback) {
472    //overwrite is true false, if false then it appends
473    //nsiFile must be nsiFile
474    if (!(nsiFile instanceof Ci.nsIFile)) {
475        Cu.reportError('ERROR: must supply nsIFile ie: "FileUtils
 >.getFile(\'Desk\', [\'rawr.txt\']" OR "FileUtils.File(\'C:\\\\\')
 >"');
476        return;
477    }
478    if (overwrite) {
479        var openFlags = FileUtils.MODE_WRONLY | FileUtils.MODE_CR
 >EATE | FileUtils.MODE_TRUNCATE;
480    } else {
481        var openFlags = FileUtils.MODE_WRONLY | FileUtils.MODE_CR
 >EATE | FileUtils.MODE_APPEND;
482    }
488        //data is data you want to write to file483    //data is data you want to write to file
489        //if file doesnt exist it is created484    //if file doesnt exist it is created
490        var ostream = FileUtils.openSafeFileOutputStream(file)485    var ostream = FileUtils.openFileOutputStream(nsiFile, openFla
 >gs)
491        var converter = Components.classes["@mozilla.org/intl/scr486    var converter = Cc['@mozilla.org/intl/scriptableunicodeconver
>iptableunicodeconverter"].createInstance(Components.interfaces.ns>ter'].createInstance(Ci.nsIScriptableUnicodeConverter);
>IScriptableUnicodeConverter); 
492        converter.charset = "UTF-8";487    converter.charset = 'UTF-8';
493        var istream = converter.convertToInputStream(data);488    var istream = converter.convertToInputStream(data);
494        // The last argument (the callback) is optional.489    // The last argument (the callback) is optional.
495        NetUtil.asyncCopy(istream, ostream, function (status) {490    NetUtil.asyncCopy(istream, ostream, function (status) {
496                if (!Components.isSuccessCode(status)) {491        if (!Components.isSuccessCode(status)) {
497                        // Handle error!492            // Handle error!
498                         Components.utils.reportError('error on w493            Cu.reportError('error on write isSuccessCode = ' + st
>rite isSuccessCode = ' + status);>atus);
494            callback(status);
499                        return;495            return;
500                }496        }
501                // Data has been written to the file.497        // Data has been written to the file.
502                callback(status)498        callback(status)
503        });499    });
n506function readFile(nsiFile, callback) {n502function readFile(file, callback) {
503    //file does not have to be nsIFile
507        //you must pass a callback like function(dataReadFromFile504    //you must pass a callback like function(dataReadFromFile, st
>, status) { }>atus) { }
508        //then within the callback you can work with the contents505    //then within the callback you can work with the contents of 
> of the file, it is held in dataReadFromFile>the file, it is held in dataReadFromFile
509        //callback gets passed the data as string506    //callback gets passed the data as string
510        NetUtil.asyncFetch(file, function (inputStream, status) {507    NetUtil.asyncFetch(file, function (inputStream, status) {
511                //this function is callback that runs on completi508        //this function is callback that runs on completion of da
>on of data reading>ta reading
512                if (!Components.isSuccessCode(status)) {509        if (!Components.isSuccessCode(status)) {
513                         Components.utils.reportError('error on f510            Cu.reportError('error on file read isSuccessCode = ' 
>ile read isSuccessCode = ' + status);>+ status);
511            callback(null, status)
514                        return;512            return;
515                }513        }
516                var data = NetUtil.readInputStreamToString(inputS514        var data = NetUtil.readInputStreamToString(inputStream, i
>tream, inputStream.available());>nputStream.available());
517                callback(data, status);515        callback(data, status);
518        });516    });
tt519    <h5 name="More">
520      Example Usage
521    </h5>
522    <pre class="brush: js">
523//EXAMPLE 1 - Append to file twice (if file is not there it is cr
 >eated)
524var logFile = FileUtils.getFile('Desk', ['rawr.txt']); //this get
 >s file on desktop named 'rawr.txt'
525writeFile(logFile, '\nthis is line 1, gets appended to any conten
 >ts already there', true, function (status) {
526    if (!Components.isSuccessCode(status)) {
527        Services.wm.getMostRecentWindow(null).alert('writeFile fa
 >iled');
528    } else {
529        Services.wm.getMostRecentWindow(null).alert('writeFile SU
 >CCESFUL');
530    }
531});
532writeFile(logFile, '\nthis is line 2 this gets appended', true, f
 >unction (status) {
533    if (!Components.isSuccessCode(status)) {
534        Services.wm.getMostRecentWindow(null).alert('writeFile fa
 >iled');
535    } else {
536        Services.wm.getMostRecentWindow(null).alert('writeFile SU
 >CCESFUL');
537    }
538});
539//example 2 - overwrite file (if file is not there it is created)
540writeFile(logFile, '\nthis overwrites the file', true, function (
 >status) {
541    if (!Components.isSuccessCode(status)) {
542        Services.wm.getMostRecentWindow(null).alert('writeFile fa
 >iled');
543    } else {
544        Services.wm.getMostRecentWindow(null).alert('writeFile SU
 >CCESFUL');
545    }
546});
547//example 3 read file (if file is not there status is error code
548readFile(file, function (dataReadFromFile, status) {
549    if (!Components.isSuccessCode(status)) {
550        Cu.reportError('read failed, file may not exist');
551        Services.wm.getMostRecentWindow(null).alert('read failed,
 > file may not exist');
552    } else {
553        Cu.reportError('read succesful, contents of file is:\n' +
 > dataReadFromFile);
554        Services.wm.getMostRecentWindow(null).alert('read succesf
 >ul, contents of file is:\n' + dataReadFromFile);
555    }
556});
557</pre>
558    <p>
559      &nbsp;
560    </p>
561    <h3 name="More">
562      &nbsp;
563    </h3>

Back to History