11.2 File对象的路径

本文介绍如何在不同平台上使用File对象操作文件和目录,包括设置路径、获取文件列表、让用户选择文件等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>

指向明确的目录<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>

让用户浏览选择目录<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>

指向明确的文件路径<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>

列举目录文件<o:p></o:p>

使用getDirectoryListing()方法获得文件和子目录数组。<o:p></o:p>

让用户选择文件<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>

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值