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