zoukankan      html  css  js  c++  java
  • Adobe AIR对本地文件(XML文件)的操作

    引用:http://addiwang.blog.163.com/blog/static/118130772011221114230288/

    Air的文件操做主要涉及两个类,FIle和FileStream。一般来说我们不会直接以文本形式保存文件,那样的内容不易于修改,所以这里我以 xml 文件为例。

    Note: 下面所有的function可以直接复制到你的代码中运行

    1.创建新文件。

    public function createFileDemo():void{

    var file:File = File.desktopDirectory.resolvePath("test.xml")  //尝试从系统桌面获取test.xml文件。 
    var fileStream:FileStream = new FileStream(); // 创建FileStream 对象,用于读写文件 
    fileStream.open(file,FileMode.WRITE);  //以WRITE方式打开file, 如果file中对应的文件不存在,创建新文件

    //准备文件的内容 
    var content:XML = <root> 
                             <content> 我们的第一个文件创建完毕</content>          
                            </root> 
    fileStream.writeUTFBytes(content.toXMLString()); //像文件中写入内容。 
    fileStream.close(); //完成写入,这时我们打开桌面的test.txt可以看到内容。

    }

    上面五句代码让我在我的桌面创建了名为test.xml的文件,并且写入了content。

    这里有三个地方我们要注意

    1. File.desktopDirectory — 因为AIR可以在Mac和Windows下运行,所以我们最好不要指定固定的地址,这里File.desktopDirectory的意思就是指向我系统 的桌面,因为我是mac,所以实际返回的是 /kevinluo/Desktop. 除此之外我们还可以得到如下面这些地址

    File.documentsDirectory;   //指向用户文档文件夹 
    File.applicationDirectory;  //应用程序安装目录 
    File.getRootDirectories();  //文件系统根目录

    等等,我就不一一列举了,具体的大家可以看File帮助中描述。

    2.File.desktopDirectory.resolvePath("test.xml") — 获取桌面下的test.xml。这里我们还可以这样写

    var file:File = File.desktopDirectory 
    file = file.resolvePath("test.xml")

    不过我建议还是直接写在一排,如果像这样分开写的话,当fileStream.open(file,FileMode.WRITE) 打开文件时,如果文件不存在就会报错而不会像上面那样创建新的文件。

    3. fileStream.open(file,FileMode.WRITE) –FileMode.WRITE是打开文件的方法,打开文件的方法一共有如下四种

    FileMode.READ         // 只读方式打开文件 
    FileMode.WRITE        // 写方式打开文件,文件的原有内容会被清除。文件不存在的话创建新文件 
    FileMode.APPEND   //追加方式打开文件,写入的内容总是会添加到文件的末尾。文件不存在的话创建新文件 
    FileMode.UPDATE    //直接打开文件,可以根据需要在指定位置插入数据。文件不存在的话创建新文件

    这里我们以WRITE方式创建了新文件,并写入了“我们的第一个文件创建完毕”。

    2. 读取已有的文件,修改内容,再更新文件。

    publuc function modifyFileDemo():void{

    var file2:File = File.desktopDirectory.resolvePath("test.xml");  //读取刚才创建的test.xml 
    var fs:FileStream = new FileStream();          
    fs.open(file2,FileMode.READ);  //以只读方式打开 
    var ct:XML = new XML(fs.readUTFBytes(fs.bytesAvailable));  //获取xml内容 
    ct.content = "我们的第一个文件修改完毕"     //修改content节点下的内容 
    fs.open(file2,FileMode.WRITE);   //重新以写方式打开文件,目的在于清除原有的内容 
    fs.writeUTFBytes(ct.toXMLString())   //写入修改过后的XML 
    fs.close()

    }

    这里我用了READ和WRITE的组合。在实际的使用中我们可以判断一个xml文件的大小来限制单个文件写入过大。

    3.删除文件。

    删除文件是最简单的。

    public function deleteFIleDemo():void{

    var file2:File = File.desktopDirectory.resolvePath("test.xml"); 
    if(file2.exists){   //判断文件是否存在 
        file2.deleteFile()   //删除文件 
    }

    }

    如果使用file2.moveToTrash()则将文件移到垃圾箱

    4.拷贝文件/移动文件

    public function copyFileDemo():void{

    var sourceFile:File = File.desktopDirectory.resolvePath("test.xml")    //获取源文件 
    var newFile:File = File.desktopDirectory.resolvePath("test2.xml")      //创建目标文件 
    sourceFile.copyTo(newFile,true) //执行拷贝,如果是移动的话sourceFile.moveTo(newFile,true)

    }

    5. 异步与同步

    AIR对文件的操作分为异步与同步两种方式。上面1–4介绍的是同步方式,其中的一些方法有另一个异步方式,看下面的列表

    File.copyTo() — File.copyToAsync() 
    File.moveTo() — File.moveToAsync() 
    File.deleteDirectory() — File.deleteDirectoryAsync() 
    File.deleteFile()  — File.deleteFileAsync() 
    File.getDirectoryListing()  – File.getDirectoryListingAsync() 
    File.moveToTrash() — File.moveToTrashAsync()

    FileStream.open — FileStream.openAsync()

    使用异步方式时我们需要监听EVENT.COMPLETE和IOErrorEvent.IO_ERROR事件来获取file的操作结果。我拿上面的 拷贝做个例子

    pirvate funnction copyFile(sourceFIlePath:String, targetFIlePath:String):void{

    var sourceFile:File = File.desktopDirectory.resolvePath(sourceFIlePath)    //获取源文件 
    var newFile:File = File.desktopDirectory.resolvePath(targetFIlePath) //创建目标文件 
    sourceFile.addEventListener(Event.COMPLETE,completeHandle) //监听文件操作complete事件 
    sourceFile.copyToAsync(newFile,true) ;  //开始拷贝,异步方式 
    this. showLoadingBar() //打开loading图标

    }

    private function completeHandle():void{

    Alert.show("拷贝文件完成") 
    this.closeLoadingBar() //关闭loading图标

    }

    异步方式的好处是我们可以从中实行一些别的操作,比如出现一个loading的提示之类。

  • 相关阅读:
    服务器日常维护
    每日哲言
    JAVA经典算法40题(原题+分析)之分析
    如何在苹果笔记本上装win7系统
    酷派改变者S1(C105/C105-6/C105-8) 解锁BootLoader 并刷入recovery root
    努比亚 Z17 mini s (Nubia NX589J) 解锁BootLoader 并刷入recovery ROOT
    努比亚 Z17s (Nubia NX595J) 解锁BootLoader 并刷入recovery ROOT
    努比亚 N2(Nubia NX575J) 解锁BootLoader 并进入临时recovery ROOT
    三星A3、A5、A7、G7、J5、J7、S6系列等新机型的部分手机解锁 ROOT刷机
    [2月1号] 努比亚全机型ROM贴 最全最新NubiaUI5.0 ROOT 极速体验
  • 原文地址:https://www.cnblogs.com/sode/p/3354950.html
Copyright © 2011-2022 走看看