参考内容:JavaScript Tool Guide 文件篇 

文件与文件夹对象

使用文件和文件夹对象

Windows、Mac OS 和 UNIX 上的路径名语法不同, Adob​​e ExendScript 定义FileFolder对象,用于不同平台底层文件系统的访问。File 对象代表磁盘文件,Folder 对象代表目录或文件夹。

  • Folder对象,支持文件系统,例如遍历层次结构;创建、重命名或删除文件;或解析文件别名。
  • File对象,支持输入/输出函数来读取或写入文件。

判断 File 和 Folder 对象。例如:

if ( f instanceof File ) // f是否属于文件
if ( typeof f.open == "undefined" ) ... // f文件夹未打开

Note!

创建两个相同路径的 File 对象时,会被视为不同对象。打开其中一个用于 I/O,会禁止另一个对象的访问,因为磁盘文件已经打开。

指定路径

创建文件或文件夹对象时,可以指定特定平台的路径名,或者以独立于平台的格式(通用资源标识符表示法,以下统称URI)指定绝对或相对路径。存储在对象中的路径始终是指向磁盘上固定位置的绝对完整路径名。

  •  toString 方法:获取文件或文件夹的名称,包含 URI 的绝对路径名。
  • fsName属性:获取特定于平台的文件名。

绝对路径和相对路径

URI 中的绝对路径,从根目录到文件或文件夹的完整路径。以一或两个斜线 ( /)开头,斜线用于分隔路径。例如,myFile.jsx文件的绝对位置:

/dir1/dir2/mydir/myFile.jsx

URI 中的相对路径名附加到当前目录的路径,如存储在Folder 类的全局可用属性current。它以文件夹或文件名开头,或者以当前目录. 或当前父目录..的开头。斜线 ( /) 分隔路径元素。例如,myFile.jsx各种相对位置表示方法:

myFile.jsx 在当前目录中。
./myFile.jsx
../myFile.jsx 在当前目录的父目录中。
../../myFile.jsx 在当前目录的祖父目录中。
../dir1/myFile.jsx 在与当前目录平行的 dir1 中。

相对路径独立于不同机器和操作系统上的不同卷名,因此代码更具可移植性。例如可以对一个使用绝对路径,使用Folder.current 设置当前目录,其他的使用相对路径。只需更改一个代码即可更新到新平台或文件位置。

路径中的字符解释

不同平台解释方式存在差异:

  • Windows 和 Mac OS 路径名不区分大小写。UNIX 则区分大小写。
  • Windows ,斜杠 ( /) 和反斜杠 ( \) 均有效。反斜杠\是转义字符,因此必须使用双反斜杠 ( \\) 来表示。
  •  Mac OS 上,斜杠 ( /) 和冒号 ( :) 均为有效的路径元素分隔符。

如果路径名以两个斜杠(或 Windows 上的反斜杠)开头,则第一个元素指的是远程服务器。例如,//myhost/mydir/myfile指的/mydir/myfile是服务器myhost 上的路径。

URI 允许在路径名中使用特殊字符,但必须使用转义字符 (%) 后跟十六进制字符代码来指定它们。特殊字符是非字母数字且不是以下字符的字符:

、/ - - . ! ~ * ' ( )

例如,空格被编码为%20,因此my file my%20file

此编码方案与全局 JavaScript 函数encodeURIdecodeURI兼容.

主目录

路径名可以以波浪号 ( ~)开头,代表用户主目录。对应于平台的 HOME环境变量。

UNIX 和 Mac OS 根据用户登录分配 HOME 环境变量。 Mac OS 默认主目录是/Users/username.  UNIX 中,通常为/home/username/users/username. ExtendScript 直接从平台值分配主目录值。

Windows,HOME环境变量是可选的。如果已分配,则其值必须是 Windows 路径名或引用远程服务器的路径名(例如\\myhost\mydir)。如果HOME未定义环境变量,则 ExtendScript 默认为用户的主目录,通常是文件夹。C:\Documents and Settings\username

Note!

脚本可以通过静态的、全局可用的 Folder 类属性,访问特定于平台的变量指定的文件夹;例如,appData文件夹包含用户应用程序数据。

卷和驱动器名称

卷或驱动器名称可以是 URI 中绝对路径的第一部分。根据平台解释这些值。

Mac OS 卷

Mac OS X 启动时,启动卷是文件系统的根目录。所有其他卷,包括远程卷,都是 /Volumes 目录的一部分。File 和 Folder 对象使用这些规则来解释路径名的第一个元素:

  • 如果名称是启动卷的名称,则丢弃。
  • 如果名称是卷名,则在前面加/Volumes
  • 否则,保持路径不变。

不支持 Mac OS 9 作为操作系统,但仍然支持使用冒号作为路径分隔符,并且对应于 URI 和 Mac OS X 路径,如下表所示。这些示例假设启动卷是MacOSX,并且有一个已安装的卷Remote

URI 路径名 Mac OS 9 路径名 Mac OS X 路径名
/MacOSX/目录/文件 MacOSX:目录:文件 /目录/文件
/远程/目录/文件 远程:目录:文件 /卷/远程/目录/文件
/root/目录/文件 根目录:目录:文件 /root/目录/文件
~/目录/文件 /用户/jdoe/目录/文件

Windows 驱动器

在 Windows 上,卷名对应于驱动器号。URI 路径/c/temp/file/span>  通常会转换为 Windows 路径C:\temp\file

如果存在名称与路径第一部分匹配的驱动器,则该部分始终被解释为该驱动器。根目录中可能有与驱动器同名的文件夹;例如C:\C。以 /c 开头的路径始终指向driveC: ,因此在这种情况下,要按名称访问文件夹,必须同时使用驱动器名称和文件夹名称,例如/c/cfor C:\C

如果当前驱动器包含与另一个驱动器号同名的根文件夹,则该名称被视为文件夹。也就是说,如果存在文件夹D:\C,并且当前驱动器是D:,则 URI 路径 /c/temp/file将转换为 Windows 路径D:\c\temp\file。在这种情况下,要访问 drive C,您必须使用 Windows 路径名称约定。

要访问远程卷,请使用格式为 的统一命名约定 (UNC) 路径名 //servername/sharename。这些路径名是可移植的,因为 Max OS X 和 UNIX 都忽略多个斜杠字符。请注意,在 Windows 上,UNC 名称不适用于本地卷。假设当前驱动器是D: 以下示例:

URI 路径名 Windows 路径名
/c/目录/文件 c:目录文件
/远程/目录/文件 D:远程目录文件
/root/目录/文件 D:根目录文件
~/目录/文件 C:Documents and Settingsjdoedirfile

别名 (翻译到这

当您访问别名时,操作被透明地转发到真实文件。唯一影响别名的操作是调用renameremove,以及设置属性readonlyhidden。当 File 对象表示别名时,该alias对象的属性返回 true,该resolve方法返回别名目标的 File 或 Folder 对象。

在 Windows 上,所有文件系统别名(称为快捷方式)都是名称以扩展名结尾的实际文件 .lnk。切勿直接使用此扩展程序;File 和 Folder 对象在没有它的情况下工作。

例如,假设文件/folder1/some.txt夹中有文件的快捷方式/folder2。快捷方式文件的完整 Windows 文件名是“folder2some.txt.lnk“。

要从 File 对象访问快捷方式,请指定 path /folder2/some.txt。调用该 File 对象的 open 方法会打开链接的文件(在 中/folder1)。调用 File 对象的rename方法会重命名快捷方式文件本身(保持.lnk扩展名不变)。

但是,Windows 允许文件及其快捷方式驻留在同一文件夹中。在这种情况下,File 对象总是访问原始文件。当快捷方式与其链接文件位于同一文件夹中时,您无法创建 File 对象来访问快捷方式。

脚本可以通过为磁盘上尚不存在的文件创建 File 对象并使用其 createAlias 方法指定别名的目标来创建文件别名。

便携性问题

如果您的应用程序将在多个平台上运行,请使用相对路径名,或尝试从主目录中生成路径名。如果这不可能,请使用 Mac OS X 和 UNIX 别名,并将文件存储在 Windows 计算机的远程计算机上,以便您可以使用 UNC 名称。

例如,假设您使用 UNIX 机器 myServer 进行数据存储。如果您在 的根目录中设置别名共享myServer,并且如果您在指向相同数据位置的共享处设置 Windows 可访问的共享,则路径名将//myServer/share/file适用于所有三个平台。


 

Unicode 输入/输出

在进行文件 I/O 时,Adobe 应用程序将 8 位字符编码转换为 Unicode。默认情况下,此转换过程假定使用系统编码(Windows 上的代码页 1252 或 Mac OS 上的 Mac Roman)。encodingFile 对象的属性返回当前编码。您可以将 encoding 属性设置为所需编码的名称。File 对象在操作系统中寻找相应的编码器以用于后续 I/O。这个名字是用来描述的HTML文件,如编码标准的互联网品牌之一ASCIIX-SJISISO-8859-1。有关完整列表,请参阅文件和文件夹支持的编码名称

BINARY为二进制 I/O 提供了一个特殊的编码器。此编码器只是将它找到的每个 8 位字符扩展为 0 到 255 之间的 Unicode 字符。当使用此编码器写入二进制文件时,编码器会写入 Unicode 字符的低 8 位。例如,要写入 Unicode 字符1000,即 0x3E8,编码器实际上会写入字符 232 ( 0xE8)。

一些常见文件格式(UCS-2、UCS-4、UTF-8、UTF-16)的数据以特殊的字节顺序标记 (BOM) 字符 ( \uFEFF)开头。该File.open方法读取文件的几个字节以查找此字符。如果找到,则自动设置相应的编码并跳过该字符。如果文件开头没有 BOM 字符,则 open() 读取文件的前 2 KB 并检查数据是否可能是有效的 UTF-8 编码数据,如果是,则将编码设置为 UTF-8。

要以 UTF-16 格式编写 16 位 Unicode 文件,请使用编码 UCS-2。此编码使用主机平台支持的任何字节顺序格式。

使用 UTF-8 编码或 16 位 Unicode 时,始终将 BOM 字符写入"\uFEFF"文件的第一个字符。


 

文件错误处理

每个对象都有一个error属性。如果访问属性或调用方法导致错误,则此属性包含描述错误类型的消息。成功时,该属性包含空字符串。您可以设置该属性,但设置它只会导致错误消息被清除。如果文件已打开,则为该属性分配任意值也会重置其错误标志。

有关受支持的错误消息的完整列表,请参阅文件访问错误消息

您的电子邮箱地址不会被公开。 必填项已用*标注