JavaScript. Подробное руководство, 6-е издание
Шрифт:
Класс
FileEntry
определяет метод для получения объекта File
(двоичный объект Blob
), представляющий содержимое файла. Получив этот объект, его содержимое можно прочитать с помощью объекта FileReader
(как показано в разделе 22.6.5). Объект FileEntry
определяет еще один метод, возвращающий объект FileWriter
, который можно использовать для записи в файл. Операции чтения
FileEntry
, представляющий требуемый файл. Затем с помощью объекта FileEntry
нужно получить объект File или FileWriter
для выполнения операции чтения или записи. Этот процесс становится особенно сложным при использовании асинхронного прикладного интерфейса:
// Читает текстовый файл "hello.txt" и выводит его содержимое. При использовании
// асинхронного прикладного интерфейса глубина вложенности функций достигает
// четырех уровней. Этот пример не включает определения функций обработки ошибок.
requestFileSystem(PERSISTENT, 10*1024*1024, function(fs) { // Получить объект ФС
fs.root.getFile("hello.txt”, {}, function(entry) { // Получить FileEntry
entry.file(function(file) { // Получить File
var reader = new FileReader;
reader.readAsText(file);
reader.onload = function { // Получить содержимое файла
console.log(reader.result);
};
});
});
});
В примере 22.13 демонстрируется более полное решение. В нем показано, как использовать асинхронный прикладной интерфейс для чтения, записи и удаления файлов, создания каталогов и получения списков их содержимого.
Пример 22.13. Использование асинхронного прикладного интерфейса доступа к файловой системе
/*
* Следующие функции были протестированы в Google Chrome 10.0 dev.
* Вам может потребоваться запустить Chrome со следующими ключами:
* --unlimited-quota-for-files : разрешает доступ к файловой системе
* —allow-file-access-from-files : разрешает тестировать из URL file://
*/
//
Многие асинхронные функции, используемые здесь, принимают необязательные функции
// обратного вызова для обработки ошибок.
// Следующая функция просто выводит сообщение об ошибке,
function logerr(e) { console.log(e); }
// requestFileSystem возвращает локальную файловую систему, доступную
// только приложениям с указанным происхождением. Приложение может читать
// и писать файлы в ней, но не может получить доступ к остальной файловой системе,
var filesystem; // Предполагается, что эта переменная будет инициализирована
// перед вызовом функции, объявленной ниже.
requestFileSystem(PERSISTENT, // Или TEMPORARY для кэширования файлов 10*1024*1024,
// Требуется 10 Мбайт
function(fs) { // После выполнения вызвать эту функцию
filesystem = fs; // Просто сохранить ссылку на файловую систему
},
//в глобальной переменной,
logerr); // Вызвать эту функцию в случае ошибки
// Читает содержимое указанного файла как текст и передает его функции обратного вызова,
function readTextFile(path, callback) {
// Вызвать getFile, чтобы получить объект FileEntry для файла
// с указанным именем
filesystem.root.getFile(path, {}, function(entry) {
// При вызове этой функции передается объект FileEntry, соответствующий файлу.
// Теперь следует вызвать метод FileEntry.file, чтобы получить объект File
entry.file(function(file) { // Вызвать с объектом File
var reader = new FileReader; // Создать объект FileReader
reader.readAsText(file); // И прочитать файл
reader.onload = function { // В случае успешного чтения
callback(reader.result); // Передать данные функции callback
}
Поделиться с друзьями: