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的提示之类。

  • 相关阅读:
    Validation failed for one or more entities. See 'EntityValidationErrors' property for more details
    Visual Studio断点调试, 无法监视变量, 提示无法计算表达式
    ASP.NET MVC中MaxLength特性设置无效
    项目从.NET 4.5迁移到.NET 4.0遇到的问题
    发布网站时应该把debug设置false
    什么时候用var关键字
    扩展方法略好于帮助方法
    在基类构造器中调用虚方法需谨慎
    ASP.NET MVC中商品模块小样
    ASP.NET MVC中实现属性和属性值的组合,即笛卡尔乘积02, 在界面实现
  • 原文地址:https://www.cnblogs.com/sode/p/3354950.html
Copyright © 2011-2022 走看看