来源:http://blog.csdn.net/zdingxin/article/details/6635376

在AIR中可以方便的对本地文件操作,不过上次做了个项目,发现还是有不少不方便的地方,比如AIR对文件和目录的打包和解压 (最终我使用了调用BAT执行解压和打包操作,使用方法在我的其它文章中有提到)

一下是我引用官方的一些说明文档:

文件对象是啥?
文件对象(File对象)是在文件系统中指向文件或目录的指针。由于安全原因,只在AIR中可用。

文件对象能做啥?

  1. 获取特定目录,包括用户目录、用户文档目录、该应用程序启动的目录和程序目录
  2. 拷贝文件和目录
  3. 移动文件和目录
  4. 删除文件和目录(或移至回收站)
  5. 列出某目录中的文件和目录
  6. 创建临时文件和文件夹
  7. 创建目录
  8. 读取文件信息
  9. 获取文件系统信息

在AIR中,我们用FileStream读写文件的前提就是用File对象来指向文件。

那么文件对象具体怎么玩呢?

功能1、指向目录和文件
File 对象有两个属性都能定义文件路径,它们是nativePath和url。nativePath是在特定平台使用的文件路径(主要就是Windows和 MacOs上的路径表示不同),url则是统一的”file:///c:/Sample%20directory/test.txt”这样的表示方法。

我们来看几个指向目录的实例,其中1-7演示了如何获取特殊目录

    1. var file:File = File.userDirectory; //指向用户文件夹
    1. var file:File = File.documentsDirectory; //指向用户文档文件夹
    1. var file:File = File.desktopDirectory; //指向桌面
    1. var file:File = File.applicationStorageDirectory; //指向应用程序存储目录

    (参见AIR的URL方案)

    1. var dir:File = File.applicationDirectory; //应用程序安装目录
    1. var dir:File = File.getRootDirectories(); //文件系统根目录
  1. 还有一招,指向请求启动该应用程序的目录,先空着,以后补上。参考资料见《Capturing command
    line arguments》
    1. var file:File = new File();
    2. file.nativePath = "C://Mousebomb//";

    //(windows平台)指向一个具体的目录,这里使用了nativePath属性,”C://Mousebomb//”只适用windows中。

  2. var file:File = File.userDirectory;
    file = file.resolvePath(”Mousebomb”);
    //跳转到用户目录下的Mousebomb目录
    1. var urlStr:String = "file:///C:/Mousebomb/";
    2. var file:File = new File()
    3. file.url = urlStr;
    4. //指向c盘下的Mousebomb目录,这里使用了url属性
    1. /*让用户选择目录*/
    2. var file:File = new File();
    3. file.addEventListener(Event.SELECT, dirSelected);
    4. file.browseForDirectory("Select a directory");
    5. function dirSelected(e:Event):void {
    6. trace(file.nativePath);
    7. }

下面看看指向文件的实例:

  1. 指向明确的文件地址:

    1. var file:File = File.applicationStorageDirectory;
    2. file = file.resolvePath("Flashj.txt");
  2. 使用url属性的例子:
    1. var urlStr:String = "file:///C:/Mousebomb/Flashj.txt";
    2. var file:File = new File()
    3. file.url = urlStr;
  3. 当然你也可以直接这样写
    1. var urlStr:String = "file:///C: /Mousebomb/Flashj.txt";
    2. var file:File = new File(urlStr);
    3. //url中的空格会被%20替换
  4. 使用nativePath属性:
    1. var file:File = new File();
    2. file.nativePath = "C:/ Mousebomb/Flashj.txt";
  5. 或者
    1. var file:File = new File("C:/ Mousebomb/Flashj.txt");
    2. //(Windows下)
  6. 通过对话框让用户选择文件
    实现这个功能需要认识三个方法:
    browseForOpen()
    browseForSave()
    browseForOpenMultiple()
    三 个方法都是异步的,browseForOpen() 和 browseForSave()方法在用户选择文件时会触发select事件,在选择了某文件时,File指向选择的文件。而browseForOpenMultiple()方法会触发selectMultiple事件,该事件属于FileListEvent型,它的属性中具有指向所选文件的File对象数组。
    例子:
    1. var fileToOpen:File = File.documentsDirectory;
    2. selectTextFile(fileToOpen);
    3. function selectTextFile(root:File):void
    4. {
    5. var txtFilter:FileFilter = new FileFilter("Text", "*.as;*.css;*.html;*.txt;*.xml");
    6. root.browseForOpen("Open", [txtFilter]);
    7. root.addEventListener(Event.SELECT, fileSelected);
    8. }
    9. function fileSelected(event:Event):void
    10. {
    11. trace(fileToOpen.nativePath);
    12. }

功能2、拷贝文件和目录
拷贝文件使用到的方法有copyTo()和copyToAsync(),详见AIR文件基础,前者为同步方法,后者为异步方法。
要拷贝文件,需要创建2个File对象,一个指向原文件,一个指向目标文件。像下面两例:
1.同步拷贝例:

  1. var original:File = File.documentsDirectory.resolvePath("Mousebomb/FlashJ.txt");
  2. var newFile:File = File.resolvePath("Mousebomb/FlashJcn.txt");
  3. original.copyTo(newFile, true);

第二个参数true表示覆盖存在的文件,默认值是false,若设置为false,而拷贝的目标文件已经存在,则AIR会发出IOErrorEvent事件。
2.异步拷贝例:

  1. var original = File.documentsDirectory;
  2. original = original.resolvePath("Mousebomb/FlashJ.txt");
  3. var destination:File = File.documentsDirectory;
  4. destination = destination.resolvePath("FlashJ/FlashJcn.txt");
  5. original.addEventListener(Event.COMPLETE, fileCopyCompleteHandler);
  6. original.addEventListener(IOErrorEvent.IO_ERROR, fileCopyIOErrorEventHandler);
  7. original.CopyToAsync(destination);
  8. function fileCopyCompleteHandler(event:Event):void {
  9. trace(event.target); // [object File]
  10. }
  11. function fileCopyIOErrorEventHandler(event:IOErrorEvent):void {
  12. trace("I/O Error.");
  13. }

功能3、移动文件和目录
移动文件使用的方法有moveTo()和MoveToAsync(),不仅长相类似,连使用方法都与拷贝文件一样,可以直接参考上文。

功能4、删除文件和目录(或移至回收站)
deleteFile()和deleteFileAsync()负责删除功能,而moveToTrash()和moveToTrashAsync()功能是移至回收站。先创建一个File对象指向某个文件或目录,然后执行四个方法之一,处理异步方法要加事件监听。

  1. var file:File = File.documentsDirectory.resolvePath("DeleteMe.txt");
  2. file.moveToTrash();

功能5、列出某目录中的文件和目录
可以使用getDirectoryListing()方法和getDirectoryListingAsync()方法获取某个目录下文件与子目录的File指针数组。
例如:

  1. var directory:File = File.documentsDirectory;
  2. var contents:Array = directory.getDirectoryListing();
  3. for (var i:uint = 0; i < contents.length; i++)
  4. {
  5. trace(contents[i].name, contents[i].size);
  6. }

本例输出了用户文档目录中的文件名和大小。
若使用异步方法,例如:

  1. var directory:File = File.documentsDirectory;
  2. directory.getDirectoryListingAsync();
  3. directory.addEventListener(FileListEvent.DIRECTORY_LISTING, dirListHandler);
  4. function dirListHandler(event:FileListEvent):void
  5. {
  6. var contents:Array = event.files;
  7. for (var i:uint = 0; i < contents.length; i++)
  8. {
  9. trace(contents[i].name, contents[i].size);
  10. }
  11. }

其中directoryListing事件对象中有个files属性,为目录下内容的File指针数组。

功能6、创建临时文件和文件夹
使用createTempFile()和createTempDirectory()方法可以创建临时文件和文件夹。
var temp:File = File.createTempFile(); //在系统临时文件夹下创建临时文件
createTempFile()方法会自动创建一个唯一的临时文件。
createTempDirectory ()方法会自动创建一个唯一的临时文件夹。
你可以用临时文件来临时存储应用程序回话中的信息。
由于临时文件不会自动删除,所以你可能得让应用程序在关闭前删除它。

功能7、创建目录
使用createDirectory()方法可以创建目录,例如:

  1. var dir:File = File.userDirectory.resolvePath("Mousebomb");
  2. dir.createDirectory();

这个例子在用户文件夹下创建了Mousebomb目录,如果Mousebomb目录存在,则不会作出操作。

功能8、读取文件信息
File类中包含以下属性,提供File对象所指向文件或目录的信息。

属性

描述

creationDate

创建日期

exists

是否存在

extension

扩展名,若无则为null

icon

该文件的图标对象

isDirectory

是否目录

modificationDate

修改日期

name

文件名(包括扩展名)

nativePath

特定平台使用的文件路径

parent

父级目录,若该File对象就是顶级则此属性为null

size

字节大小

url

统一资源定位符

详细参见AIR ActionScript. 3.0 Language Reference for Adobe AIR.

功能9、获取文件系统信息
File类包含一下静态属性,提供有用的文件系统信息(主要是跨平台使用):

属性

描述

File.lineEnding

系统的行结束符

File.separator

系统的分隔符(Windows下为/ Mac Os为/)

File.systemCharset

系统的默认文件编码,属于系统所使用的字符集

顺便插进Capabilities类包含的静态属性:

属性

描述

Capabilities.hasIME

当前运行的系统是否安装了输入法编辑器

Capabilities.language

当前运行的系统的语言编码

Capabilities.os

当前运行的操作系统

AIR文件操作:使用文件对象操作文件和目录 .的更多相关文章

  1. AIR使用文件对象操作文件和目录

    文件对象是啥?文件对象(File对象)是在文件系统中指向文件或目录的指针.由于安全原因,只在AIR中可用. 文件对象能做啥? 获取特定目录,包括用户目录.用户文档目录.该应用程序启动的目录和程序目录 ...

  2. AIR文件操作(二):使用文件对象操作文件和目录

    转载于:http://www.flashj.cn/wp/air-file-operation2.html 文件对象是啥?文件对象(File对象)是在文件系统中指向文件或目录的指针.由于安全原因,只在A ...

  3. python file文件操作--内置对象open

    说明: 1. 函数功能打开一个文件,返回一个文件读写对象,然后可以对文件进行相应读写操作. 2. file参数表示的需要打开文件的相对路径(当前工作目录)或者一个绝对路径,当传入路径不存在此文件会报错 ...

  4. HTML5新特性之文件和二进制数据的操作 Blob对象

    HTML5新特性之文件和二进制数据的操作 1.Blob对象 2.FileList对象 3.File对象 4.FileReader 对象 5.URL对象

  5. [转]python file文件操作--内置对象open

    python file文件操作--内置对象open   说明: 1. 函数功能打开一个文件,返回一个文件读写对象,然后可以对文件进行相应读写操作. 2. file参数表示的需要打开文件的相对路径(当前 ...

  6. Django学习——静态文件配置、request对象方法、pycharm如何链接数据库、Django如何指定数据库、Django orm操作

    静态文件配置 # 1.静态文件 网站所使用的已经提前写好的文件 css文件 js文件 img文件 第三方文件 我们在存储静态文件资源的时候一般默认都是放在static文件夹下 # 2.Django静态 ...

  7. Adobe AIR and Flex - 保存序列化对象文件(译)

    创建任何桌面应用程序几乎总是需要在本地存储数据,通过Adobe AIR我们有几下面几个选择,一个是我们能够使用内置的 SQLite 数据库支持,对于少量的数据这是大材小用了.另外一个选择是我们通过把数 ...

  8. c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出

    c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出 using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using S ...

  9. 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作

    在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界面看起来更加美观和协调.但是在系统中一般内置的图标样式相对比较有限,而且硬编码写到样式表里面,这 ...

随机推荐

  1. hdu1036

    #include<stdio.h>int main(){ int n; double d; int num; char h,m1,m2,s1,s2; scanf("%d" ...

  2. JavaScript忍者秘籍——原型

    概要:本篇博客主要介绍JavaScript的原型 1.对象实例化 - 初始化的优先级 初始化操作的优先级如下: ● 通过原型给对象实例添加的属性 ● 在构造器函数内给对象实例添加的属性 在构造器内的绑 ...

  3. sql优化--in和exists效率

    系统要求进行SQL优化,对效率比较低的SQL进行优化,使其运行效率更高,其中要求对SQL中的部分in/not in修改为exists/not exists 修改方法如下: in的SQL语句 SELEC ...

  4. drupal7 开发自定义上传、下载模块的上传功能

    关键点有两个:1.在页面上显示出上传的控件,2.代码实现文件上传到服务器的功能 一.显示控件: 先来看关键点1: 实现页面显示出上传控件, 关键代码: $form['my_file_field'] = ...

  5. Android:自定义Dialog大小,显示圆角

    经过测试,可以使用. ----------------------------------------------------------- AlertDialog.Builder builder = ...

  6. linux共享文件夹

    mnt中没有 hgfs,重新安装vm tools后问题解决

  7. JSON.parse() JSON.stringify() eval() jQuery.parseJSON() 的区别

    http://www.jb51.net/article/81880.htm    :   jQuery.parseJSON(jsonString) : 将格式完好的JSON字符串转为与之对应的Java ...

  8. 设置phpMyAdmin本地自动登陆

    一般配置本地测试用的 phpMyAdmin 可以不用每次输入帐号密码,打开后自动登陆就行了. 版本: phpMyAdmin 3.5.3 打开: phpMyAdmin 根目录 复制: config.sa ...

  9. Android非常有用的开源库介绍整理

    Android开源库 自己一直很喜欢Android开发,就如博客副标题一样,我想做个好的App. 在摸索过程中,GitHub上搜集了很多很棒的Android第三方库,推荐给在苦苦寻找的开发者,而且我会 ...

  10. python并行任务之生产消费模式

    一. 生产者/消费者模式 概念:生产者产生一块数据,放到buffer中,与此同时,消费者在从buffer中取出并消耗这些数据 理解:像生活中厂家生产出产品,顾客购买消耗这些产品,buffer就是存放商 ...