FileSystemDirectoryEntry: getDirectory() 方法

FileSystemDirectoryEntry 接口的 getDirectory() 方法会返回一个 FileSystemDirectoryEntry 对象,该对象对应于调用它的目录的目录树中某个位置的目录。

语法

js
getDirectory()
getDirectory(path)
getDirectory(path, options)
getDirectory(path, options, successCallback)
getDirectory(path, options, successCallback, errorCallback)

参数

path 可选

一个字符串,表示一个绝对路径或相对于调用方法的目录的路径,描述要返回哪个目录条目。出于安全原因,绝对路径可能无法使用。

options 可选

一个对象,允许您指定条目是否应在缺失时创建,以及文件已存在时是否为错误。这些选项在 Web 上下文中目前没有用。有关更多详细信息,请参阅选项参数部分。

successCallback 可选

在创建 FileSystemDirectoryEntry 后要调用的方法。该方法接收一个参数:代表相关目录的 FileSystemDirectoryEntry 对象。

errorCallback 可选

发生错误时要调用的方法。接收一个 DomException 对象作为其唯一的输入参数,该对象描述了发生的错误。

options 参数

options 参数对象接受以下参数:

create 可选

如果此属性为 true,并且请求的目录不存在,则用户代理应创建它。默认值为 false。父目录必须已存在。

exclusive 可选

如果为 true,并且 create 选项也为 true,则目录在调用时必须不存在。相反,它必须能够在调用时被新创建。默认值为 false。如果 createfalse,则忽略此参数。

下表描述了这些标志的每种可能组合的结果,具体取决于目标目录路径是否已存在。

create 选项 exclusive 选项 路径条件 结果
false 已忽略 路径存在且为目录 使用 FileSystemDirectoryEntry 调用 successCallback
false 已忽略 路径存在但为文件 调用 errorCallback(如果提供了回调函数),并附带适当的错误代码。
true false 路径存在 删除现有目录并用新目录替换,然后使用 FileSystemDirectoryEntry 调用 successCallback
true false 路径不存在 创建目录,然后将 FileSystemDirectoryEntry 传递给 successCallback
true true 路径存在 调用 errorCallback,并附带适当的错误,例如 DOMException.PATH_EXISTS_ERR
true true 路径不存在 创建目录,然后将 FileSystemDirectoryEntry 传递给 successCallback

返回值

无(undefined)。

异常

NotFoundError DOMException

如果未指定 create 选项(或指定为 false),并且目录不存在,则会抛出此错误。

SecurityError DOMException

出于安全原因,访问目录的请求被拒绝时会抛出此错误。

TypeMismatchError DOMException

指定的路径不是目录时会抛出此错误;它可能是文件,也可能是不受支持的文件描述符(如管道);这在一定程度上取决于用户代理。

示例

在此示例中,提供了一个函数,其任务是在用户应用程序数据目录中查找包含指定语言用户字典的 JSON 文件,然后加载该字典。

js
let dictionary = null;

function loadDictionaryForLanguage(appDataDirEntry, lang) {
  dictionary = null;

  appDataDirEntry.getDirectory("Dictionaries", {}, (dirEntry) => {
    dirEntry.getFile(`${lang}-dict.json`, {}, (fileEntry) => {
      fileEntry.file((dictFile) => {
        let reader = new FileReader();

        reader.addEventListener("loadend", () => {
          dictionary = JSON.parse(reader.result);
        });

        reader.readAsText(dictFile);
      });
    });
  });
}

loadDictionaryForLanguage() 函数首先使用 getDirectory() 获取代表位于指定应用程序数据目录内的名为“Dictionaries”的子文件夹的 FileSystemDirectoryEntry 对象。此函数的成功回调接收由此产生的目录条目对象,并调用 getFile() 来获取代表字典文件的 FileSystemFileEntry 对象;此函数的成功回调接着会创建一个新的 FileReader 并使用它来加载文件的内容。当文件加载成功后(由 loadend 事件触发指示),加载的文本会传递给 JSON.parse(),以将其重构为 JavaScript 对象。

规范

规范
File and Directory Entries API
# dom-filesystemdirectoryentry-getdirectory

浏览器兼容性

另见