使用Flash air操作本地文件
文件操作类Flash?AIR提供了让您能用来访问、创建、管理文件与目录的类。这些类被放置在flash.filesystem包中,也就是下面那三个类:
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()方法可以创建临时文件和文件夹。 创建目录使用createDirectory()方法可以创建目录,例如: 1.?vardir:File = File.userDirectory.resolvePath("Mousebomb"); 2.?dir.createDirectory(); 这个例子在用户文件夹下创建了Mousebomb目录,如果Mousebomb目录存在,则不会作出操作。 读取文件信息File类中包含以下属性,提供File对象所指向文件或目录的信息。
获取文件系统信息File类包含一下静态属性,提供有用的文件系统信息(主要是跨平台使用):
顺便插进Capabilities类包含的静态属性:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |