File对象的路径<o:p></o:p>
每个File对象有两个属性定义路径:<o:p></o:p>
nativePath 指定特定平台文件路径。例如,在Windows上路径大概是"c:\Sample directory\test.txt" 而在Mac OS上应该是"/Sample directory/test.txt"。注意不同的操作系统目录分隔符是不同的。<o:p></o:p>
url 用URL格式定义文件路径。例如,在Windows上的路径大概是"file:///c:/Sample%20directory/test.txt"而在Mac OS 上是"file:///Sample%20directory/test.txt"。<o:p></o:p>
<o:p></o:p>
指向目录的File对象<o:p></o:p>
这里有几种方法设置指向一个目录的File对象。<o:p></o:p>
设定File对象指定用户的home目录,在Windows,home目录就是"My Documents"目录的父目录(例如"C:\Documents and Settings\userName\My Documents")。在Mac OS上,就是Users/userName 目录。下面的代码设置File对象指向用户目录的一个AIR Test子目录:<o:p></o:p>
var file:File = File.userDirectory.resolvePath("AIR Test"); <o:p></o:p>
<o:p></o:p>
设置File对象指向用户的documents目录。在Windows上就是"My Documents"目录(如"C:\Documents and Settings\userName\My Documents"),在On Mac OS,上,就是Users/userName/Documents 目录,下面的代码设置File对象指向文档目录的子目录AIR Test:<o:p></o:p>
var file:File = File.documentsDirectory.resolvePath("AIR Test"); <o:p></o:p>
<o:p></o:p>
还可以指向桌面,下面的代码设置File对象指向桌面的AIR Test子目录:<o:p></o:p>
var file:File = File.desktopDirectory.resolvePath("AIR Test"); <o:p></o:p>
<o:p></o:p>
File对象还可指向应用程序的存储目录。每个AIR程序都有个独立的存储目录用于存储数据和配置文件。例如,下面的代码File对象指向配置文件prefs.xml,该文件保存在应用程序存储目录:<o:p></o:p>
var file:File = File.applicationStorageDirectory; <o:p></o:p>
file = file.resolvePath("prefs.xml"); <o:p></o:p>
<o:p></o:p>
File对象还可指向应用程序安装目录,通过File.applicationResourceDirectory属性指向应用程序资源目录。可用此目录检查应用程序描述文件或其他资源,例如下面的代码File对象指向资源目录的images子目录:<o:p></o:p>
var file:File = File.applicationResourceDirectory; <o:p></o:p>
file = file.resolvePath("images"); <o:p></o:p>
<o:p></o:p>
File.getRootDirectories()方法列出根目录卷标,如winodws上的C:,在Mac上为"/"目录。<o:p></o:p>
设置nativePath属性可指向明确的目录:<o:p></o:p>
var file:File = new File(); <o:p></o:p>
file.nativePath = "C:\\AIR Test\\"; <o:p></o:p>
<o:p></o:p>
resolvePath()方法获得相对路径,例如下面的代码获得用户目录的"AIR Test"子目录路径:<o:p></o:p>
var file:File = File.userDirectory; <o:p></o:p>
file = file.resolvePath("AIR Test"); <o:p></o:p>
<o:p></o:p>
还可通过url属性获得url格式的路径信息:<o:p></o:p>
var urlStr:String = "file:///C:/AIR Test/"; <o:p></o:p>
var file:File = new File() <o:p></o:p>
file.url = urlStr; <o:p></o:p>
<o:p></o:p>
File类包含一个browseForDirectory()方法,会弹出一个系统对话框让用户选择目录,该方法是异步的,如果用户点击Open按钮它会触发select事件,否则触发cancel事件。<o:p></o:p>
例如,下面的代码让用户选择一个目录,然后输出该目录路径:<o:p></o:p>
var file:File = new File(); <o:p></o:p>
file.addEventListener(Event.SELECT, dirSelected); <o:p></o:p>
file.browseForDirectory(); <o:p></o:p>
function dirSelected(e:Event):void { <o:p></o:p>
trace(file.nativePath); <o:p></o:p>
} <o:p></o:p>
<o:p></o:p>
指向文件的File对象<o:p></o:p>
有几种方法:<o:p></o:p>
使用resolvePath()方法获得文件相对路径:<o:p></o:p>
var file:File = File.applicationStorageDirectory; <o:p></o:p>
file = file.resolvePath("log.txt"); <o:p></o:p>
<o:p></o:p>
使用url格式的路径:<o:p></o:p>
var urlStr:String = "file:///C:/AIR Test/test.txt"; <o:p></o:p>
var file:File = new File() <o:p></o:p>
file.url = urlStr; <o:p></o:p>
<o:p></o:p>
URL可作为构造函数参数:<o:p></o:p>
var urlStr:String = "file:///C:/AIR Test/test.txt"; <o:p></o:p>
var file:File = new File(urlStr); <o:p></o:p>
<o:p></o:p>
注意url属性总是返回URI编码的字符串(如空格转换为%20): <o:p></o:p>
file.url = "file:///c:/AIR Test"; <o:p></o:p>
trace(file.url); // file:///c:/AIR%20Test <o:p></o:p>
<o:p></o:p>
nativePath属性设置文件明确路径,例如下面的代码在windows中设置文件对象指向test.txt 文件:<o:p></o:p>
var file:File = new File(); <o:p></o:p>
file.nativePath = "C:/AIR Test/test.txt"; <o:p></o:p>
<o:p></o:p>
也可作为构造函数参数:<o:p></o:p>
var file:File = new File("C:/AIR Test/test.txt"); <o:p></o:p>
<o:p></o:p>
在Windows系统中分隔符既可以用(/) 也可以是(\) ,在Mac OS系统中只可以用(/):<o:p></o:p>
var file:File = new File(/Users/dijkstra/AIR Test/test.txt"); <o:p></o:p>
<o:p></o:p>
使用getDirectoryListing()方法获得文件和子目录数组。<o:p></o:p>
File类包含下列方法打开系统对话框让用户选择文件:<o:p></o:p>
browseForOpen() <o:p></o:p>
browseForSave() <o:p></o:p>
browseForMultiple() <o:p></o:p>
例如,下面的代码演示用户点击Open对话框让用户选择文件:<o:p></o:p>
var fileToOpen:File = File.documentsDirectory; <o:p></o:p>
selectTextFile(fileToOpen); <o:p></o:p>
<o:p></o:p>
function selectTextFile(root:File):void <o:p></o:p>
{ <o:p></o:p>
var txtFilter:FileFilter = new FileFilter("Text", "*.as;*.css;*.html;*.txt;*.xml"); <o:p></o:p>
root.browseForOpen("Open", [txtFilter]); <o:p></o:p>
root.addEventListener(Event.SELECT, fileSelected); <o:p></o:p>
} <o:p></o:p>
<o:p></o:p>
function fileSelected(event:Event):void <o:p></o:p>
{ <o:p></o:p>
trace(fileToOpen.nativePath); <o:p></o:p>
} <o:p></o:p>
<o:p></o:p>
如果程序已经打开了一个该对话框,再次打开会抛出runtime异常。<o:p></o:p>
<o:p></o:p>
修改文件路径<o:p></o:p>
可通过resolvePath()方法修改路径或修改nativePath及url属性:<o:p></o:p>
var file1:File = File.documentsDirectory; <o:p></o:p>
file1 = file1.resolvePath("AIR Test"); <o:p></o:p>
trace(file1.nativePath); // C:\Documents and Settings\userName\My Documents\AIR Test <o:p></o:p>
var file2:File = File.documentsDirectory; <o:p></o:p>
file2 = file2.resolvePath(".."); <o:p></o:p>
trace(file2.nativePath); // C:\Documents and Settings\userName <o:p></o:p>
var file3:File = File.documentsDirectory; <o:p></o:p>
file3.nativePath += "/subdirectory"; <o:p></o:p>
trace(file3.nativePath); // C:\Documents and Settings\userName\My Documents\subdirectory <o:p></o:p>
var file4:File = new File(); <o:p></o:p>
file.url = "file:///c:/AIR Test/test.txt" <o:p></o:p>
trace(file3.nativePath); // C:\AIR Test\test.txt <o:p></o:p>
<o:p></o:p>
支持URL模式<o:p></o:p>
可使用下列任意URL格式定义File对象的url属性:<o:p></o:p>
file 指定相对于文件系统的路径:<o:p></o:p>
file:///c:/AIR Test/test.txt <o:p></o:p>
app-resource 指定相对于应用程序安装目录的相对路径,例如下面的images子目录位于程序安装目录之下:<o:p></o:p>
app-resource:/images <o:p></o:p>
app-storage 指定相对于程序储存目录的相对路径,每个安装的程序都有唯一的数据存储目录:app-storage:/settings/prefs.xml <o:p></o:p>
<o:p></o:p>
两个文件的相对路径<o:p></o:p>
使用getRelativePath()方法找出两个文件的相对路径:<o:p></o:p>
var file1:File = File.documentsDirectory.resolvePath("AIR Test"); <o:p></o:p>
var file2:File = File.documentsDirectory <o:p></o:p>
file2 = file2.resolvePath("AIR Test/bob/test.txt"); <o:p></o:p>
trace(file1.getRelativePath(file2)); // bob/test.txt <o:p></o:p>
<o:p></o:p>
第二个参数为true表示返回的结果中含有(..)路径表示法:<o:p></o:p>
var file1:File = File.documentsDirectory; <o:p></o:p>
file1 = file1.resolvePath("AIR Test"); <o:p></o:p>
var file2:File = File.documentsDirectory; <o:p></o:p>
file2 = file2.resolvePath("AIR Test/bob/test.txt"); <o:p></o:p>
var file3:File = File.documentsDirectory; <o:p></o:p>
file3 = file3.resolvePath("AIR Test/susan/test.txt"); <o:p></o:p>
<o:p></o:p>
trace(file2.getRelativePath(file1, true)); // ../.. <o:p></o:p>
trace(file3.getRelativePath(file2, true)); // ../../bob/test.txt <o:p></o:p>
<o:p></o:p>
获取正确的文件名<o:p></o:p>
文件和路径名是不区分大小写的,下面的两个File对象实际上指向同一个文件:<o:p></o:p>
File.documentsDirectory.resolvePath("test.txt"); <o:p></o:p>
File.documentsDirectory.resolvePath("TeSt.TxT"); <o:p></o:p>
<o:p></o:p>
然而,文件和目录名字确实包含大写字母的使用,例如假定文档目录中有一个目录叫AIR Test :<o:p></o:p>
var file:File = File.documentsDirectory.resolvePath("AIR test"); <o:p></o:p>
trace(file.nativePath); // ... AIR test <o:p></o:p>
file.canonicalize(); <o:p></o:p>
trace(file.nativePath); // ... AIR Test <o:p></o:p>
<o:p></o:p>
Canonicalize方法转换nativePath对象为正确的大小写字母。<o:p></o:p>
Canonicalize方法还可以把路径缩写转换为Windows下的长文件名:<o:p></o:p>
var path:File = new File(); <o:p></o:p>
path.nativePath = "C:\\AIR~1"; <o:p></o:p>
path.canonicalize(); <o:p></o:p>
trace(path.nativePath); // C:\AIR Test <o:p></o:p>
<o:p></o:p>