JavaScript. Подробное руководство, 6-е издание, стр. 395
<b> reader.onload = function() { // Получить содержимое файла</b><b> console.log(reader.result);</b><b> };</b><b> });</b><b> });</b><b>});</b>В примере 22.13 демонстрируется более полное решение. В нем показано, как использовать асинхронный прикладной интерфейс для чтения, записи и удаления файлов, создания каталогов и получения списков их содержимого.
Пример 22.13. Использование асинхронного прикладного интерфейса доступа к файловой системе
<b>/*</b><b>* Следующие функции были протестированы в Google Chrome 10.0 dev.</b><b>* Вам может потребоваться запустить Chrome со следующими ключами:</b><b>* --unlimited-quota-for-files : разрешает доступ к файловой системе</b><b>* —allow-file-access-from-files : разрешает тестировать из URL file://</b><b>*/</b><b>// Многие асинхронные функции, используемые здесь, принимают необязательные функции</b><b>// обратного вызова для обработки ошибок.</b><b>// Следующая функция просто выводит сообщение об ошибке,</b><b>function logerr(e) { console.log(e); }</b><b>// requestFileSystem() возвращает локальную файловую систему, доступную</b><b>// только приложениям с указанным происхождением. Приложение может читать</b><b>// и писать файлы в ней, но не может получить доступ к остальной файловой системе,</b><b>var filesystem; // Предполагается, что эта переменная будет инициализирована</b><b> // перед вызовом функции, объявленной ниже.</b><b>requestFileSystem(PERSISTENT, // Или TEMPORARY для кэширования файлов 10*1024*1024,</b><b> // Требуется 10 Мбайт</b><b> function(fs) { // После выполнения вызвать эту функцию</b><b> filesystem = fs; // Просто сохранить ссылку на файловую систему</b><b> }, </b><b> //в глобальной переменной,</b><b> logerr); // Вызвать эту функцию в случае ошибки</b><b>// Читает содержимое указанного файла как текст и передает его функции обратного вызова, </b><b>function readTextFile(path, callback) {</b><b> // Вызвать getFile(), чтобы получить объект FileEntry для файла</b><b> // с указанным именем</b><b> filesystem.root.getFile(path, {}, function(entry) {</b><b> // При вызове этой функции передается объект FileEntry, соответствующий файлу.</b><b> // Теперь следует вызвать метод FileEntry.file(), чтобы получить объект File</b><b> entry.file(function(file) { // Вызвать с объектом File</b><b> var reader = new FileReader(); // Создать объект FileReader</b><b> reader.readAsText(file); // И прочитать файл</b><b> reader.onload = function() { // В случае успешного чтения</b><b> callback(reader.result); // Передать данные функции callback</b><b> }</b><b> reader.onerror = logerr; // Сообщить об ошибке в readAsText()</b><b> },</b><b> logerr); </b><b> // Сообщить об ошибке в file()</b><b> },</b><b> logerr); // Сообщить об ошибке в getFile()</b><b>}</b><b>// Добавляет указанное содержимое в конец файла с указанным именем, создает новый файл,</b><b>// если файл с указанным именем не существует. Вызывает callback по завершении операции, </b><b>function appendToFile(path, contents, callback) {</b><b> // filesystem.root - это корневой каталог,</b><b> filesystem.root.getFile( // Получить объект FileEntry</b><b> path, // Имя и путь к требуемому файлу</b><b> {create:true}, // Создать, если не существует</b><b> function(entry) { // Вызвать эту функцию, когда файл будет найден</b><b> entry.createWriter( // Создать для файла объект FileWriter</b><b> function(writeг) { // Вызвать эту функцию после создания</b><b> // По умолчанию запись производится в начало файла.</b><b> // Нам же требуется выполнить запись в конец файла</b><b> writer.seek(writer.length); // Переместиться в конец файла</b><b> // Преобразовать содержимое файла в объект Blob. Аргумент contents</b><b> // может быть строкой, объектом Blob или объектом ArrayBuffer.</b>