Чтение и запись.
Рассмотрим код в файле ReadFiles.mxml. Что мы имеем?
Код:
import flash.events.*;
private var file:File;
private var stream:FileStream;
private var IC:InfoCollector;
private var result_str:String = '';
private function init (e:Event):void {
IC = InfoCollector.getInstance ();
stream = new FileStream ();
}
private function read (e:Event):void {
file = File.documentsDirectory;
var path:String = IC.path;
//проходим по всем именам в массиве
for (var i:uint = 0; i < IC.nams.length; i++){
//полный путь до файла
file = file.resolvePath(path + '/' + IC.nams[i]);
//открываем файл
stream.open(file, FileMode.READ);//FileMode.READ укаазывает на тип открытия
/* приводим строку к виду
//* название файла.txt
//содержание файла, если пустой пишем " -- empty -- "
//дописываем прочерк и отступ строки на два пункта
result_str += '* ' + IC.nams[i] + '\n';
*/
var text_in:String = stream.readMultiByte (stream.bytesAvailable, "iso-8859-01");
if (text_in == ''){
result_str += '-- empty --';
} else {
result_str += text_in;
}
result_str += '\n_____________________ \n\n';
stream.close();
}
}
FileStream – класс пакета flash.filesystem, он нам и понадобится для побайтового чтения содержания файлов.
FileMode – класс того же пакета что и предыдущие два класса. Его существование обоснованно безопасностью файла который открыт, но об этом коротко буквально через несколько строчек.
При помощи FileStream мы можем считывать и записывать файлы. То что любой файл состоит из битов которые состовляют байты я рассказывать не буду, так вот о чём это я, о том что мы можем модифицировать любой файл внезависимости от его расширения. Для этого существует ряд методов с которыми вы можете ознакомиться в документации. В уроке используются два,
readMultiByte и
writeMultiByte.
readMultiByte — принимает два параметра, длину и кодировку в которой будет прочтён файл. AIR поддерживает не много кодировок. Если выбраная кодировка будет отсутствовать в системе под которой работает AIR этот парамметр будет заменён на другой возможный.
FileMode — тип того что будет сделано. Констант всего 4.
READ – исключительно чтение
WRITE – запись и создание если не существует
APPEND – Запись, создание и добавление.
UPDATE – Чтение, запись и создание.
Если не хотите чтобы с файлом во время выполнения что-то произошло выставляйте
FileMode в
READ.
Теперь мы имеем отформатированое содержимое файлов, осталось его записать в файл. Для этого нам нужно будет вызвать browseForSave нами бегло рассмотренного класса File. После того как пользователь выберет директорию и запишет имя файла мы вызовем код создающий файл и записывающий в него нашу текстовую информацию. К сожалению метод browseForSave урезан в своей функциональности, мы не можем назначать дефолтное имя фаила, т.е. пользователю придёться вводить его самостоятельно. Ещё мы не можем выбирать разрешение в котором сохранять файл, нет фильтра как browseForOpen. Ну что же будем сохранять файл для ворда, с форматом .doc.
Пишем код:
WriteFile.mxml
Код:
private var myFile:File
myFile = File.desktopDirectory;
private function browseFolder (e:Event):void {
try{
myFile.browseForSave ("open file...");
}
catch(e:Error){
}
myFile.addEventListener(Event.SELECT, saveData);
}
private function saveData (e:Event):void {
trace (e.target.nativePath);
var newFile:File = File.documentsDirectory.resolvePath(e.target.nativePath + '.doc');
if (!newFile.exists){
var stream:FileStream = new FileStream();
stream.open(newFile, FileMode.WRITE);
stream.writeMultiByte (IC.string, "UTF-8");
stream.close();
}
}
}
Если файла не существует файл будет создан, а если да то будет перезаписан.
Снова пользуемся FileStream но теперь для записи. Код схож с тем который писали для открытия директории, тот же слушатель который реагирует на выбор директории. Вроде всё, всем удачи.
К уроку прилагаются:
AIR приложение,
исходники урока и папку с
текстовыми файлами .