FileSystemDirectoryEntry: getDirectory() 方法

FileSystemDirectoryEntry 接口的方法 getDirectory() 返回一个 FileSystemDirectoryEntry 对象,该对象对应于包含在调用其方法的目录的根目录子树中的某个位置的目录。

语法

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

参数

path 可选

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

options 可选

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

successCallback 可选

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

errorCallback 可选

如果发生错误要调用的方法。接收其唯一的输入参数 DomException 对象,描述发生的错误。

options 参数

options 参数对象接受以下参数

create 可选

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

exclusive 可选

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

下表描述了根据目标目录路径是否存在,这些标志的每种可能组合的结果。

create 选项 exclusive 选项 路径条件 结果
false 忽略 路径存在且为目录 successCallback 被调用,并带有 FileSystemDirectoryEntry
false 忽略 路径存在但为文件 errorCallback 被调用,并带有适当的错误代码(如果提供了回调)。
true false 路径存在 现有目录被删除并替换为新的目录,然后 successCallback 被调用,并带有 FileSystemDirectoryEntry
true false 路径不存在 创建目录,然后将 FileSystemDirectoryEntry 传递给 successCallback
true true 路径存在 errorCallback 被调用,并带有适当的错误,例如 FileError.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() 获取 FileSystemDirectoryEntry 对象,该对象表示位于指定应用程序数据目录中的名为“Dictionaries”的子文件夹。此项操作的成功回调将接收生成的目录条目对象,并调用 getFile() 以获取 FileSystemFileEntry 对象,该对象表示词典文件;反过来,此操作的成功回调会创建一个新的 FileReader,并使用它来加载文件的内容。当成功加载(如通过触发 loadend 事件指示)时,加载的文本将被传递到 JSON.parse() 中,以便重新构成一个 JavaScript 对象。

规范

规范
文件和目录条目 API
# dom-filesystemdirectoryentry-getdirectory

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅