Flash AIR提供了让您能用来访问、创建、管理文件与目录的类。这些类被放置在flash.filesystem包中,也就是下面那三个类:
类 |
描述 |
File |
File对象代表一个文件或目录的路径。您可以用file对象建立一个指向文件或目录的指针,以作用于文件或目录。 |
FileMode |
FileMode类定义在FileStream类的open()和openAsync()方法中使用的字符串常量参数。 |
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()方法调用相应函数。
同步版本使您不需要依赖设置事件监听,直接写简单的代码。然而,其他代码无法在同步方法执行时执行,重要的进程(比如显示对象渲染和动画播放)可能被暂停。
在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();
例子:
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 |
当前运行的操作系统 |