как создать объект nsIFile с использованием URI

Я делаю расширение для firefox, и я хочу, чтобы мое расширение открывало файл типа «file:///home/blahblah/foo.txt», а затем помещало содержимое этого файла в текстовую область. Это легко с файлами "http://", но я не могу сделать это с "file://"


person Community    schedule 17.08.2009    source источник
comment
Вы говорите, что у вас есть файл: URI, из которого вы хотите загрузиться, и вам нужен для него объект nsIFile?   -  person sdwilsh    schedule 18.08.2009


Ответы (2)


при работе с локальными файлами вы должны действительно «загружать» их:

    var file = Components.classes["@mozilla.org/file/local;1"]
           .createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath("/home/blahblah/foo.txt");
    if ( file.exists() == false ) {
        dup.value = “File does not exist”;
    }
    var istream = Components.classes["@mozilla.org/network/file-input-stream;1"]
        .createInstance(Components.interfaces.nsIFileInputStream);
    istream.init(file, 0x01, 4, null);
    var fileScriptableIO = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream); 
    fileScriptableIO.init(istream);
    // parse the xml into our internal document
    istream.QueryInterface(Components.interfaces.nsILineInputStream); 
    var fileContent = "";
    var csize = 0; 
    while ((csize = fileScriptableIO.available()) != 0)
    {
        fileContent += fileScriptableIO.read( csize );
    }
    fileScriptableIO.close();   
    istream.close();

fileContent содержит содержимое в виде строки

person Niko    schedule 17.08.2009
comment
Следует отметить, что это не обрабатывает символы, отличные от ASCII. Здесь также описан более простой способ: developer .mozilla.org/index.php?title=en/Code_snippets/ - person sdwilsh; 18.08.2009

Если у вас есть строка URI для файла (а не локальный путь или объект nsIFile), вы также можете использовать XMLHttpRequest для чтения содержимого файла.

person Neil    schedule 01.10.2009