Flex:air file 系统中文件或目录的指针
File 对象是指向文件系统中文件或目录的指针。
File 类扩展了 FileReference 类。在 Adobe? Flash? Player 和 AIR 中可用的 FileReference 类表示指向文件的指针,但 File 类添加了一些属*和方法,出于安全方面的考虑,Flash Player 中(在浏览器中运行的 SWF 文件中)未公开这些属*和方法。
当使用 nativePath 属*时,在 Windows 中使用正斜杠 (/) 或反斜杠 (\) 字符作为目录分隔符;在 Mac OS 中使用正斜杠 (/) 字符。在 Windows 中,切记在字符串文本中键入反斜杠字符两次。
定义 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 类包括 isPackage 和 isSymbolicLink 属*,用于检查 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