Flex中将单个本地TXT文件转化成本地XML文件
XML文件方便检索和便利,因此有的时候需要将电脑里面的TXT文件转化成XML文件。
涉及的类有:
具体用法请参看:http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/index.html
2 import flash.filesystem.FileMode;
3 import flash.filesystem.FileStream;
4 import flash.net.FileFilter;
5 import flash.xml;
要转换的txt文件:/Files/SuperITGirl/Class1_1.txt
项目文件列表:
1、singleTxtTransform.mxml
2 <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
3 xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="initWin(event)">
4 <fx:Script>
5 <![CDATA[
6 import mx.events.FlexEvent;
7
8 private var txtFile:File = new File();
9 private var xmlFile:File = new File();
10 private var fileStream:FileStream = new FileStream();
11 private var fileFilter:FileFilter = new FileFilter("TEXT","*.txt");
12 private var txter:TxtDealer = new TxtDealer();
13 private var xmler:XmlDealer = new XmlDealer();
14 [Bindable]
15 private var unDealedStr:String = new String();
16
17 protected function initWin(event:FlexEvent):void
18 {
19 System.useCodePage = true;
20 }
21
22 protected function select_clickHandler(event:MouseEvent):void
23 {
24 txtFile.browseForOpen("选择要转化的文件",[fileFilter]);
25 txtFile.addEventListener(Event.SELECT,onSelect);
26 }
27
28 private function onSelect(eve:Event):void
29 {
30 fileStream.addEventListener(Event.COMPLETE,onComplete);
31 fileStream.openAsync(txtFile,FileMode.READ);
32 }
33
34 private function onComplete(eve:Event):void
35 {
36 unDealedStr = fileStream.readMultiByte(fileStream.bytesAvailable,File.systemCharset);
37 fileStream.close();
38 txter.dealContent(unDealedStr);
39 }
40
41 /**开始转化成xml*/
42 protected function begin_clickHandler(event:MouseEvent):void
43 {
44 xmler.dealXmlContent();
45 }
46
47 /**关闭程序*/
48 protected function quit_clickHandler(event:MouseEvent):void
49 {
50 NativeApplication.nativeApplication.exit();
51 }
52
53 ]]>
54 </fx:Script>
55 <fx:Declarations>
56 <!-- 将非可视元素(例如服务、值对象)放在此处 -->
57 </fx:Declarations>
58 <s:Panel>
59 <s:VGroup gap="10" top="10" right="10" left="10" bottom="10">
60 <s:HGroup>
61 <s:Button id="select" label="选择文件" click="select_clickHandler(event)"/>
62 <s:Button id="begin" label="开始转化" click="begin_clickHandler(event)"/>
63 <s:Button id="quit" label="退出系统" click="quit_clickHandler(event)"/>
64 </s:HGroup>
65 <s:VGroup>
66 <s:Label id="scan" text="文件预览框"/>
67 <s:TextArea id="content" text="{unDealedStr}"/>
68 </s:VGroup>
69 </s:VGroup>
70 </s:Panel>
71 </s:WindowedApplication>
2、TxtDealer.as
2 package
3 {
4 import flash.system.System;
5
6 public class TxtDealer
7 {
8 public static var titleStr:String = new String();
9 public static var attributeArr:Array = new Array();
10 private var ContentArr:Array = new Array();
11 private var dataUnitArr:Array = new Array();
12 public static var dataItemArr:Array = new Array();
13 public static var attributeNum:int = new int();
14 public static var formArr:Array = new Array();
15
16 private var Enter:RegExp = /\r/;//回车
17 private var Space:RegExp = /\s/;//空格
18
19 public function TxtDealer()
20 {
21 System.useCodePage = true;
22 }
23
24 public function dealContent(txtContent:String):void
25 {
26 ContentArr = txtContent.split(Enter);
27 titleStr = ContentArr[0];
28 var tempArr1:Array = ContentArr[2].split(Space);
29 for(var i:int = 0;i<tempArr1.length;i++)
30 {
31 if(tempArr1[i])
32 {
33 attributeArr.push(tempArr1[i]);
34 }
35 }
36 dataUnitArr = ContentArr.slice(3);
37 var tempArr2:Array;
38 for(var j:int = 0;j<dataUnitArr.length;j++)
39 {
40 tempArr2 = new Array();
41 tempArr2 = dataUnitArr[j].split(Space);
42 for(var k:int = 0;k<tempArr2.length;k++)
43 {
44 if(tempArr2[k])
45 {
46 dataItemArr.push(tempArr2[k]);
47 }
48 }
49 }
50 attributeNum = dataItemArr.length/dataUnitArr.length;
51 for(var m:int = 0;m<dataUnitArr.length;m++)
52 {
53 var tempArr:Array = dataUnitArr[m].split(Space);
54 var tempArr4:Array = new Array();
55 for(var n:int = 0;n<tempArr.length;n++)
56 {
57 if(tempArr[n])
58 {
59 tempArr4.push(tempArr[n]);
60 }
61 }
62 formArr.push(tempArr4);
63 }
64 }
65 }
66 }
3、XmlDealer.as
2 package
3 {
4 import flash.filesystem.File;
5 import flash.filesystem.FileMode;
6 import flash.filesystem.FileStream;
7 import flash.system.System;
8
9 import mx.controls.Alert;
10
11 public class XmlDealer
12 {
13 private var xmlFile:File = new File();
14 private var nodeStream:FileStream = new FileStream();
15 private var xmlStream:FileStream = new FileStream();
16 private var fileName:String = new String();
17 private var studentXML:XML = <Student></Student>;
18
19 public function XmlDealer()
20 {
21 System.useCodePage = true;
22 }
23
24 public function dealXmlContent():void
25 {
26 fileName = TxtDealer.titleStr;
27 var path:String = "nameList/"+fileName+".xml";
28 xmlFile = File.desktopDirectory.resolvePath(path);
29 if(xmlFile.exists)
30 {
31 Alert.show(fileName+"文件已经于:"+xmlFile.nativePath+",若要更新,行删除原有文件!");
32 }
33 else
34 {
35 for(var i:int = 0;i<TxtDealer.formArr.length;i++)
36 {
37 var studentSonXml:XML = <student></student>;
38 for(var j:int = 0;j<TxtDealer.attributeArr.length;j++)
39 {
40 studentSonXml.appendChild(<{TxtDealer.attributeArr[j]}>{TxtDealer.formArr[i][j]}</{TxtDealer.attributeArr[j]}>);
41 }
42 nodeStream.open(xmlFile,FileMode.WRITE);
43 nodeStream.writeMultiByte(studentSonXml.toXMLString(), "utf-8");
44 nodeStream.close();
45 studentXML.appendChild(studentSonXml);
46 }
47 xmlStream.open(xmlFile,FileMode.WRITE);
48 xmlStream.writeMultiByte(studentXML.toXMLString(), "utf-8");
49 xmlStream.close();
50 Alert.show("转换完毕");
51 }
52 }
53 }
54 }
转换后的文件:/Files/SuperITGirl/一年一班.xml会在桌面上面找到
备注:这里有三个地方我们要注意
1. File.desktopDirectory -- 因为AIR可以在Mac和Windows下运行,所以我们最好不要指定固定的地址,这里File.desktopDirectory的意思就是指向我系统的桌面,因为我是mac,所以实际返回的是 /kevinluo/Desktop. 除此之外我们还可以得到如下面这些地址
File.documentsDirectory; //指向用户文档文件夹(我的文档下面)
File.applicationDirectory; //应用程序安装目录
File.getRootDirectories(); //文件系统根目录
等等,我就不一一列举了,具体的大家可以看File帮助中描述。
2. fileStream.open(file,FileMode.WRITE) --FileMode.WRITE是打开文件的方法,打开文件的方法一共有如下四种
FileMode.READ // 只读方式打开文件
FileMode.WRITE // 写方式打开文件,文件的原有内容会被清除。文件不存在的话创建新文件
FileMode.APPEND //追加方式打开文件,写入的内容总是会添加到文件的末尾。文件不存在的话创建新文件
FileMode.UPDATE //直接打开文件,可以根据需要在指定位置插入数据。文件不存在的话创建新文件
3. xml.appendChild
将给定子项追加到该 XML 对象属性的末尾。appendChild() 方法可采用 XML 对象、XMLList 对象或随后转换为 String 的任何其他数据类型。
posted on 2012-06-13 12:04 SuperITGirl李小扣 阅读(625) 评论(0) 收藏 举报
浙公网安备 33010602011771号