Flex中将单个本地TXT文件转化成本地XML文件

XML文件方便检索和便利,因此有的时候需要将电脑里面的TXT文件转化成XML文件。

涉及的类有:

具体用法请参看:http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/index.html

1     import flash.filesystem.File;
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

 1 <?xml version="1.0" encoding="utf-8"?>
 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

 1 /**作用:把TXT文件里的内容进行分割*/
 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

 1 /**将处理完的Txt内容存储为xml*/
 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)    收藏  举报

导航