使用Flash air操作本地文件

文件操作类

Flash AIR提供了让您能用来访问、创建、管理文件与目录的类。这些类被放置在flash.filesystem包中,也就是下面那三个类:

描述

File

File对象代表一个文件或目录的路径。您可以用file对象建立一个指向文件或目录的指针,以作用于文件或目录。

FileMode

FileMode类定义在FileStream类的open()和openAsync()方法中使用的字符串常量参数。
这些方法的FileMode参数确定了文件打开后FileStream对象可用的功能,包括写入、读取、追加和更新。

FileStream

FileStream对象打开文件以便读写数据。当创建一个File对象指向一个新的或已存在的文件后,您将该指针传递给FileStream对象,就可以用FileStream来打开并操作文件数据。

File类中的某些方法分别有同步和异步两种版本:

· File.copyTo() 和 File.copyToAsync()

· File.deleteDirectory() 和File.deleteDirectoryAsync()

· File.deleteFile() 和File.deleteFileAsync()

· File.getDirectoryListing() 和File.getDirectoryListingAsync()

· File.moveTo() 和File.moveToAsync()

· File.moveToTrash() 和File.moveToTrashAsync()

同样,FileStream是以同步或异步方式来操作数据,取决于FileStream对象如何打开文件:是调用open()方法还是调用openAsync()方法。

异步版本的处理过程在后台运行,当执行完成或产生错误时触发相应事件。其他代码可以在这些异步操作后台运行的同时执行。使用异步版本操作,你必须设置事件监听,使用File或FileStream对象的addEventListener()方法调用相应函数。

同步版本使您不需要依赖设置事件监听,直接写简单的代码。然而,其他代码无法在同步方法执行时执行,重要的进程(比如显示对象渲染和动画播放)可能被暂停。

使用文件对象操作文件和目录

什么是文件对象?

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

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

两种路径表示方法

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

获取特殊目录的方法

var file:File = File.userDirectory; //指向用户文件夹
var file:File = File.documentsDirectory; //指向用户文档文件夹
var file:File = File.desktopDirectory; //指向桌面
var file:File = File.applicationStorageDirectory; //指向应用程序存储目录
var dir:File = File.applicationDirectory; //应用程序安装目录
var dir:File = File.getRootDirectories(); //文件系统根目录

获取指定目录:

1.本地路径

//(windows平台)指向一个具体的目录,这里使用了nativePath属性,”C:Mousebomb”只适用windows中。
var file:File = newFile();
file.nativePath = "C:Mousebomb";
//跳转到用户目录下的Mousebomb目录
var file:File = File.userDirectory;
file = file.resolvePath(“Mousebomb”);

2.url路径

//指向c盘下的Mousebomb目录,这里使用了url属性
var urlStr:String = "file:///C:/Mousebomb/";
var file:File = newFile();
file.url = urlStr;

让用户选择目录

var file:File = newFile();
file.addEventListener(Event.SELECT, dirSelected);
file.browseForDirectory("Select a directory");
function dirSelected(e:Event):void{
trace(file.nativePath);
}

获取文件

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

var file:File = File.applicationStorageDirectory;

file = file.resolvePath("Flashj.txt");

2. 使用url属性的例子:

var urlStr:String = "file:///C:/Mousebomb/Flashj.txt";

var file:File = newFile()

file.url = urlStr;

3. 当然你也可以直接这样写

var urlStr:String = "file:///C: /Mousebomb/Flashj.txt";

var file:File = newFile(urlStr);//url中的空格会被%20替换

4. 使用nativePath属性:

var file:File = newFile();

file.nativePath = "C:/ Mousebomb/Flashj.txt";

或者

var file:File = newFile("C:/ Mousebomb/Flashj.txt");

//(Windows下)

 5.用windows默认程序打开指定文件

file.openWithDefaultApplication();


通过对话框让用户选择文件

实现这个功能需要认识三个方法:
browseForOpen()
browseForSave()
browseForOpenMultiple()
三个方法都是异步的,browseForOpen() 和 browseForSave()方法在用户选择文件时会触发select事件,在选择了某文件时,File指向选择的文件。 而browseForOpenMultiple()方法会触发selectMultiple事件,该事件属于FileListEvent型,它的属性中具有指向所选文件的File对象数组。

例子:

var fileToOpen:File = File.documentsDirectory;
selectTextFile(fileToOpen);
functionselectTextFile(root:File):void
{
var txtFilter:FileFilter = newFileFilter("Text", "*.as;*.css;*.html;*.txt;*.xml");
root.browseForOpen("Open", [txtFilter]);
root.addEventListener(Event.SELECT, fileSelected);
}
function fileSelected(event:Event):void
{
trace(fileToOpen.nativePath);
}


拷贝文件和目录

要拷贝文件,需要创建2个File对象,一个指向原文件,一个指向目标文件。

同步拷贝,必须等拷贝完成之后才能执行其他代码:

var original:File = File.documentsDirectory.resolvePath("Mousebomb/FlashJ.txt");
var newFile:File = File.resolvePath("Mousebomb/FlashJcn.txt");
original.copyTo(newFile, true);//第二个参数true表示覆盖存在的文件,默认值是false,若设置为false,而拷贝的目标文件已经存在,
//则AIR会发出IOErrorEvent事件。


异步拷贝,将拷贝放在后台执行,可以同时执行其他代码:

var original = File.documentsDirectory;
original = original.resolvePath("Mousebomb/FlashJ.txt");
var destination:File = File.documentsDirectory;
destination = destination.resolvePath("FlashJ/FlashJcn.txt");
original.addEventListener(Event.COMPLETE, fileCopyCompleteHandler);
original.addEventListener(IOErrorEvent.IO_ERROR, fileCopyIOErrorEventHandler);
original.CopyToAsync(destination);
functionfileCopyCompleteHandler(event:Event):void{
trace(event.target); // [object File]
}
functionfileCopyIOErrorEventHandler(event:IOErrorEvent):void{
trace("I/O Error.");
}


移动文件和目录

使用函数moveTo()和MoveToAsync(),方法和拷贝一样。

删除文件和目录(或者移动到回收站)

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

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


列出目录中的文件或目录

可以使用getDirectoryListing()方法和getDirectoryListingAsync()方法获取某个目录下文件与子目录的File指针数组。

同步的方法:

//输出用户文档目录中的文件名和大小
var directory:File = File.documentsDirectory;
var contents:Array = directory.getDirectoryListing();
for(var i:uint = 0; i < contents.length; i++)
{
trace(contents[i].name, contents[i].size);
}
异步的方法:

var directory:File = File.documentsDirectory;
directory.getDirectoryListingAsync();
directory.addEventListener(FileListEvent.DIRECTORY_LISTING, dirListHandler);
functiondirListHandler(event:FileListEvent):void
{
varcontents:Array = event.files;//directoryListing事件对象中有个files属性,为目录下内容的File指针数组。
for(vari:uint = 0; i < contents.length; i++)
{
trace(contents[i].name, contents[i].size);
}
}


创建临时文件和文件夹

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


创建目录

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

1. vardir:File = File.userDirectory.resolvePath("Mousebomb");

2. dir.createDirectory();

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


读取文件信息

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

属性

描述

creationDate

创建日期

exists

是否存在

extension

扩展名,若无则为null

icon

该文件的图标对象

isDirectory

是否目录

modificationDate

修改日期

name

文件名(包括扩展名)

nativePath

特定平台使用的文件路径

parent

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

size

字节大小

url

统一资源定位符


获取文件系统信息

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

属性

描述

File.lineEnding

系统的行结束符

File.separator

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

File.systemCharset

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

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

属性

描述

Capabilities.hasIME

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

Capabilities.language

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

Capabilities.os

当前运行的操作系统





你可能感兴趣的:(Flash-AS3,flash,air,操作本地文件,打开用户目录)