Показать сообщение отдельно
Старый 27.10.2007, 13:44
screamge вне форума Посмотреть профиль Отправить личное сообщение для screamge Посетить домашнюю страницу screamge Найти все сообщения от screamge
  № 2  
Ответить с цитированием
screamge
Ветеран форума
 
Аватар для screamge

Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
По умолчанию Урок: Чтение из .txt и запись в .doc (часть 2)

Чтение и запись.



Рассмотрим код в файле 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 приложение, исходники урока и папку с текстовыми файлами .
__________________
Free-lance | Twitter | Me


Последний раз редактировалось screamge; 22.04.2008 в 05:58.