Flex:air file 系统中文件或目录的指针

File 对象是指向文件系统中文件或目录的指针。

File 类扩展了 FileReference 类。在 Adobe® Flash® Player 和 AIR 中可用的 FileReference 类表示指向文件的指针,但 File 类添加了一些属*和方法,出于安全方面的考虑,Flash Player 中(在浏览器中运行的 SWF 文件中)未公开这些属*和方法。

关于 File 类

您可以使用 File 类执行以下*作:

  • 获取特殊目录的路径,包括用户目录、用户的文档目录、应用程序的启动目录以及应用程序目录

  • 复制文件和目录

  • 移动文件和目录

  • 删除文件和目录(或将它们移到垃圾桶)

  • 列出目录中包含的文件和目录

  • 创建临时文件和文件夹

当 File 对象指向文件路径后,您可以通过 FileStream 类使用该 File 对象读取和写入文件数据。

File 对象可以指向尚不存在的文件或目录的路径。创建文件或目录时可以使用这种 File 对象。

File 对象的路径

每个 File 对象具有两个属*,各属*可分别定义该对象的路径:

属*

说明

nativePath

指定文件在特定平台上的路径。例如,在 Windows 中,路径可能是“c:\Sample directory\test.txt”,而在 Mac OS 中,路径可能是“/Sample directory/test.txt”。nativePath 属*在 Windows 中使用反斜杠 (\) 字符作为目录分隔符,在 Mac OS 中使用正斜杠 (/) 字符。

url

此属*可以使用 file URL 方案指向文件。例如,在 Windows 中,路径可能是“file:///c:/Sample%20directory/test.txt”,而在 Mac OS 中,路径可能是“file:///Sample%20directory/test.txt”。除 file 之外,运行时还包括其他特殊 URL 方案,在支持的 URL 方案中将予以介绍

File 类包括用于指向 Mac 和 Windows 中的标准目录的属*。

将 File 对象指向目录

可以采用多种不同方式设置 File 对象以使其指向某目录。

指向用户的主目录

您可以将 File 对象指向用户的主目录。在 Windows 中,主目录是“My Documents”目录(例如,“C:\Documents and Settings\userName\My Documents”)的父级。在 Mac OS 中,它是 Users/userName 目录。以下代*将设置 File 对象以使其指向主目录中的 AIR Test 子目录:

var file = air.File.userDirectory.resolvePath("AIR Test");

指向用户的文档目录

您可以将 File 对象指向用户的文档目录。在 Windows 中,此目录通常是“My Documents”目录(例如,“C:\Documents and Settings\userName\My Documents”)。在 Mac OS 中,它是 Users/userName/Documents 目录。以下代*设置 File 对象以指向文档目录中的 AIR Test 子目录:

var file = air.File.documentsDirectory.resolvePath("AIR Test");

指向桌面目录

您可以使 File 对象指向桌面。以下代*设置 File 对象以使其指向桌面的 AIR Test 子目录:

var file = air.File.desktopDirectory.resolvePath("AIR Test");

指向应用程序存储目录

您可以使 File 对象指向应用程序存储目录。对于每个 AIR 应用程序,有一个唯一的关联路径用于定义应用程序存储目录。此目录对每个应用程序和用户是唯一的。您可能希望使用此目录存储特定于用户、特定于应用程序的数据(如用户数据或首选参数文件)。例如,以下代*将使 File 对象指向应用程序存储目录中包含的首选参数文件 prefs.xml:

var file = air.File.applicationStorageDirectory; 
file = file.resolvePath("prefs.xml");

应用程序存储目录的位置由用户名、应用程序 ID 和发布者 ID 共同确定:

  • 在 Mac OS 中,位于:

    /Users/user name/Library/Preferences/applicationID.publisherID/Local Store/

    例如:

    /Users/babbage/Library/Preferences/com.example.TestApp.02D88EEED35F84C264A183921344EEA353A629FD.1/Local Store
  • 在 Windows 中,位于 Documents and Settings 目录下的以下位置:

    user name/Application Data/applicationID.publisherID/Local Store/

    例如:

    C:\Documents and Settings\babbage\Application Data\com.example.TestApp.02D88EEED35F84C264A183921344EEA353A629FD.1\Local Store

通过 File.applicationStorageDirectory 创建的 File 对象的 URL(和 url 属*)将使用 app-storage URL 方案(请参阅支持的 URL 方案),如下所示:

var dir = air.File.applicationStorageDirectory; 
dir = dir.resolvePath("prefs.xml"); 
air.trace(dir.url); // app-storage:/preferences

指向应用程序目录

您可以使 File 对象指向应用程序的安装目录,即应用程序目录。您可以使用 File.applicationDirectory 属*引用此目录。您可以使用此目录检查应用程序描述符文件或与应用程序一起安装的其他资源。例如,以下代*将使 File 对象指向应用程序目录中名为 images 的目录:

var dir = air.File.applicationDirectory; 
dir = dir.resolvePath("images");

通过 File.applicationDirectory 创建的 File 对象的 URL(和 url 属*)将使用 app URL 方案(请参阅支持的 URL 方案),如下所示:

var dir = air.File.applicationDirectory; 
dir = dir.resolvePath("images"); 
air.trace(dir.url); // app:/images

指向文件系统根目录

File.getRootDirectories() 方法列出所有根卷,如 Windows 计算机中的 C: 和已装好的卷。在 Mac 中,此方法始终返回计算机的唯一根目录(“/”目录)。

指向明确的目录

通过设置 File 对象的 nativePath 属*,可以使 File 对象指向某个明确的目录,如以下示例中所示(在 Windows 中):

var file = new air.File(); 
file.nativePath = "C:\\AIR Test\";

导航到相对路径

您可以使用 resolvePath() 方法获取相对于其他给定路径的路径。例如,以下代*将设置 File 对象以使其指向用户主目录中的“AIR Test”子目录:

var file = air.File.userDirectory; 
file = file.resolvePath("AIR Test");

您还可以使用 File 对象的 url 属*以使该对象指向基于 URL 字符串的目录,如下所示:

var urlStr = "file:///C:/AIR Test/"; 
var file = new air.File() 
file.url = urlStr;

有关详细信息,请参阅修改文件路径

让用户浏览以选择目录

File 类包括 browseForDirectory() 方法,它表示系统对话框,在该对话框中用户可以选择要分配给对象的目录。browseForDirectory() 方法为异步方法。如果用户选择一个目录并单击“打开”按钮,它将调度一个 select 事件;或者如果用户单击“取消”按钮,它将调度一个 cancel 事件。

例如,以下代*能使用户选择一个目录,并在选择后输出目录路径:

var file = new air.File(); 
file.addEventListener(air.Event.SELECT, dirSelected); 
file.browseForDirectory("Select a directory"); 
function dirSelected(event) { 
    alert(file.nativePath); 
}

指向从中调用应用程序的目录

通过检查调用应用程序时所调度的 InvokeEvent 对象的 currentDirectory 属*,可以获取从中调用应用程序的目录位置。有关详细信息,请参阅捕获命令行参数

将 File 对象指向文件

可采用多种不同方式设置 File 对象所指向的文件。

指向明确的文件路径

您可以使用 resolvePath() 方法获取相对于其他给定路径的路径。例如,以下代*设置 File 对象以使其指向应用程序存储目录中的 log.txt 文件:

var file:File = air.File.applicationStorageDirectory; 
file = file.resolvePath("log.txt");

您可以使用 File 对象的 url 属*以使该对象指向基于 URL 字符串的文件或目录,如下所示:

var urlStr = "file:///C:/AIR Test/test.txt"; 
var file = new air.File() 
file.url = urlStr;

您还可以将 URL 传递到 File() 构造函数,如下所示:

var urlStr = "file:///C:/AIR Test/test.txt"; 
var file = new air.File(urlStr);

url 属*始终返回 URL 的 URI 编*版本(例如,空格替换为 %20):

file.url = "file:///c:/AIR Test"; 
alert(file.url); // file:///c:/AIR%20Test

您还可以使用 File 对象的 nativePath 属*设置明确的路径。例如,在 Windows 计算机中运行以下代*,可以设置 File 对象以使其指向 C: 驱动器的 AIR Test 子目录中的 test.txt 文件:

var file = new air.File(); 
file.nativePath = "C:/AIR Test/test.txt";

您还可以将此路径传递到 File() 构造函数,如下所示:

var file = new air.File("C:/AIR Test/test.txt");

在 Windows 中,您可以使用正斜杠 (/) 或反斜杠 (\) 字符作为 nativePath 属*的路径分隔符。在 Mac OS 中,请使用正斜杠 (/) 字符作为 nativePath 属*的路径分隔符:

var file = new air.File(/Users/dijkstra/AIR Test/test.txt");

有关详细信息,请参阅修改文件路径

枚举目录中的文件

您可以使用 File 对象的 getDirectoryListing() 方法获取指向位于某目录根级的文件和子目录的 File 对象数组。有关详细信息,请参阅枚举目录

让用户浏览以选择文件

File 类包括以下方法,它们表示系统对话框,在该对话框中用户可以选择要分配给对象的文件:

  • browseForOpen()

  • browseForSave()

  • browseForOpenMultiple()

这些方法均为异步方法。当用户选择一个文件时(或者,对于 browseForSave() 选择一个目标路径时),browseForOpen()browseForSave() 方法将调度 select 事件。对 browseForOpen()browseForSave() 方法,在进行选择后目标 File 对象将指向所选的文件。当用户选择多个文件时,browseForOpenMultiple() 方法调度一个 selectMultiple 事件。selectMultiple 事件的类型是 FileListEvent,它具有一个 files 属*,该属*是一个 File 对象数组(指向所选的文件)。

例如,以下代*向用户显示“Open”对话框,在该对话框中用户可以选择文件:

var fileToOpen = air.File.documentsDirectory; 
selectTextFile(fileToOpen); 
 
function selectTextFile(root) 
{ 
    var txtFilter = new air.FileFilter("Text", "*.as;*.css;*.html;*.txt;*.xml"); 
    root.browseForOpen("Open", new window.runtime.Array(txtFilter)); 
    root.addEventListener(air.Event.SELECT, fileSelected); 
} 
 
function fileSelected(event) 
{ 
    trace(fileToOpen.nativePath); 
}

当您调用浏览方法时,如果应用程序已打开了其他浏览器对话框,则运行时会引发一个错误异常。

修改文件路径

通过调用 resolvePath() 方法或通过修改对象的 nativePathurl 属*,您还可以修改现有 File 对象的路径,如以下示例中所示(在 Windows 中):

file1 = air.File.documentsDirectory; 
file1 = file1.resolvePath("AIR Test"); 
alert(file1.nativePath); // C:\Documents and Settings\userName\My Documents\AIR Test 
var file2 = air.File.documentsDirectory; 
file2 = file2.resolvePath(".."); 
alert(file2.nativePath); // C:\Documents and Settings\userName 
var file3 = air.File.documentsDirectory; 
file3.nativePath += "/subdirectory"; 
alert(file3.nativePath); // C:\Documents and Settings\userName\My Documents\subdirectory 
var file4 = new air.File(); 
file.url = "file:///c:/AIR Test/test.txt" 
alert(file3.nativePath); // C:\AIR Test\test.txt

当使用 nativePath 属*时,在 Windows 中使用正斜杠 (/) 或反斜杠 (\) 字符作为目录分隔符;在 Mac OS 中使用正斜杠 (/) 字符。在 Windows 中,切记在字符串文本中键入反斜杠字符两次。

支持的 URL 方案

定义 File 对象的 url 属*时,可以使用以下任一 URL 方案:

URL 方案

说明

file

用于指定相对于文件系统根目录的路径。例如:

file:///c:/AIR Test/test.txt

URL 标准规定 file URL 采用 file://<host>/<path> 形式。作为一个特例,<host> 可以是空字符串,它被解释为“解释该 URL 的计算机”。因此,file URL 通常具有三个斜杠 (///)。

app

用于指定相对于所安装应用程序的根目录(该目录包含所安装应用程序的 application.xml 文件)的路径。例如,以下路径指向所安装应用程序的目录的 images 子目录:

app:/images

app-storage

用于指定相对于应用程序存储目录的路径。对于每个安装的应用程序,AIR 定义了一个唯一的应用程序存储目录,此目录对于存储特定于该应用程序的数据很有用。例如,以下路径指向应用程序存储目录的 settings 子目录中的 prefs.xml 文件:

app-storage:/settings/prefs.xml

查找两个文件之间的相对路径

您可以使用 getRelativePath() 方法查找两个文件之间的相对路径:

var file1 = air.File.documentsDirectory 
file1 = file1.resolvePath("AIR Test"); 
var file2 = air.File.documentsDirectory 
file2 = file2.resolvePath("AIR Test/bob/test.txt"); 
 
alert(file1.getRelativePath(file2)); // bob/test.txt

getRelativePath() 方法的第二个参数 useDotDot 允许在结果中返回 .. 语法,以指示父目录:

var file1 = air.File.documentsDirectory; 
file1 = file1.resolvePath("AIR Test"); 
var file2 = air.File.documentsDirectory; 
file2 = file2.resolvePath("AIR Test/bob/test.txt"); 
var file3 = air.File.documentsDirectory; 
file3 = file3.resolvePath("AIR Test/susan/test.txt"); 
 
alert(file2.getRelativePath(file1, true)); // ../.. 
alert(file3.getRelativePath(file2, true)); // ../../bob/test.txt

获取文件名的规范版本

文件名和路径名通常不区分大小写。在以下示例中,两个 File 对象指向同一个文件:

File.documentsDirectory.resolvePath("test.txt"); 
File.documentsDirectory.resolvePath("TeSt.TxT");

不过,文档和目录名确实包括大小写。例如,以下代*假定在文档目录中有一个名为 AIR Test 的文件夹,如以下示例中所示:

var file = air.File.documentsDirectory; 
file = file.resolvePath("AIR test"); 
trace(file.nativePath); // ... AIR test 
file.canonicalize(); 
alert(file.nativePath); // ... AIR Test

canonicalize 方法可转换 nativePath 对象,以对文件名或目录名使用正确的大小写。

在 Windows 中,您还可以使用 canonicalize() 方法将短文件名(“8.3”名称)转换为长文件名,如以下示例中所示:

var path = new air.File(); 
path.nativePath = "C:\\AIR~1"; 
path.canonicalize(); 
alert(path.nativePath); // C:\AIR Test

使用包和符号链接

多种*作系统支持包文件和符号链接文件:

在 Mac OS 中,目录可以指定为包并作为单个文件而不是目录显示在 Mac OS Finder 中。

符号链接符号链接允许一个文件指向磁盘上的其他文件或目录。尽管符号链接与别名类似,不过它们并不相同。别名始终报告为文件(而不是目录),读取或写入别名或快捷方式从不影响它指向的原始文件或目录。另一方面,符号链接的行为则完全与它指向的文件或目录类似。它可以报告为文件或目录,读取或写入符号链接将会影响它指向的文件或目录,而不影响符号链接本身。

File 类包括 isPackageisSymbolicLink 属*,用于检查 File 对象是否引用包或符号链接。

以下代*将遍历用户的桌面目录,列出不是 包的子目录:

var desktopNodes = air.File.desktopDirectory.getDirectoryListing(); 
for (i = 0; i < desktopNodes.length; i++)  
{ 
    if (desktopNodes[i].isDirectory && !!desktopNodes[i].isPackage) 
    { 
        air.trace(desktopNodes[i].name); 
    } 
}

以下代*将遍历户的桌面目录,列出不是 符号链接的文件和目录:

var desktopNodes = air.File.desktopDirectory.getDirectoryListing(); 
for (i = 0; i < desktopNodes.length; i++)  
{ 
    if (!desktopNodes[i].isSymbolicLink) 
    { 
        air.trace(desktopNodes[i].name); 
    } 
}

canonicalize() 方法可更改符号链接的路径,以指向该链接所引用的文件或目录。以下代*将遍历用户的桌面目录,报告由是符号链接的文件引用的路径:

var desktopNodes = air.File.desktopDirectory.getDirectoryListing(); 
for (i = 0; i < desktopNodes.length; i++)  
{ 
    if (desktopNodes[i].isSymbolicLink) 
    { 
        var linkNode = desktopNodes[i]; 
        linkNode.canonicalize(); 
        air.trace(desktopNodes[i].name); 
    } 
}

确定卷上的可用空间

File 对象的 spaceAvailable 属*是 File 位置的可用空间(以字节为单位)。例如,以下代*检查应用程序存储目录中的可用空间:

air.trace(air.File.applicationStorageDirectory.spaceAvailable);

如果 File 对象引用一个目录,则 spaceAvailable 属*将指示可供文件使用的目录空间。如果 File 对象引用一个文件,则 spaceAvailable 属*将指示可供该文件使用的空间。如果 File 位置不存在,则 spaceAvailable 属*将设置为 0。如果 File 对象引用一个符号链接,则 spaceAvailable 属*将设置为符号链接指向的位置的可用空间。

通常,目录或文件的可用空间与包含该目录或文件的卷上的可用空间相同。不过,可用空间与磁盘配额及每个目录的空间**有关。

将文件或目录添加到卷中通常需要比文件的实际大小或目录中内容的实际大小更多的空间。例如,*作系统可能需要更多空间来存储索引信息。或者,所需的磁盘扇区可能会使用额外的空间。此外,可用空间是动态变化的。因此,您不能期望为文件存储分配报告的全部空间。有关写入文件系统的信息,请参阅读取和写入文件

来自: http://hi.baidu.com/franky23/blog/item/b3f53f6f6925a2d680cb4a74.html

http://www.flashlook.net/Html/News/201103/1620.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值