我研究一个块的思路很简单.先看类,到底是从外到内,还是从外到内,再在内部循环.
开始先一个程序根据类,类内部的属性,方法,外部的方法.这样的结合可以
fs 的 Promise API
fs.promises
API 提供了一组备用的异步文件系统的方法,它们返回 Promise
对象而不是使用回调。 API 可通过 require('fs').promises
访问。
FileHandle 类
FileHandle
对象是数字文件描述符的包装器。 FileHandle
的实例与数字文件描述符的不同之处在于它们提供了一个面向对象的 API 来处理文件。如果没有使用 filehandle.close()
方法关闭 FileHandle
,则它可能会自动关闭文件描述符并触发进程警告,从而有助于防止内存泄漏。
FileHandle
对象的实例由 fsPromises.open()
方法在内部创建。
buffers
position
返回:
将 ArrayBufferViews
数组写入该文件。
Promise
会被解决并带上一个对象,对象包含一个 bytesWritten
属性(表明写入的字节数)和一个 buffers
属性(指向 buffers
输入)。
position
指定文件开头的偏移量(数据应该被写入的位置)。 如果 typeof position !== 'number'
,则数据会被写入当前的位置。
在同一文件上多次调用 writev()
且不等待前面的操作完成,这是不安全的。
在 Linux 上,当以追加模式打开文件时,写入无法指定位置。 内核会忽略位置参数,并始终将数据追加到文件的末尾。
data | |
options
异步地将数据写入到一个文件,如果文件已存在则覆盖该文件。 data
可以是字符串或 buffer。 Promise
将会在成功时解决,且不带参数。
如果 data
是一个 buffer,则 encoding
选项会被忽略。
如果 options
是一个字符串,则它指定字符编码。
FileHandle
必须支持写入。
在同一个文件上多次使用 filehandle.writeFile()
且不等待 Promise
被解决(或被拒绝)是不安全的。
如果对文件句柄进行了一次或多次 filehandle.write()
调用,然后再调用 filehandle.writeFile()
,则将从当前位置写入数据,直到文件结束。 它并不总是从文件的开头写入。
string
position
encoding 默认值: 'utf8'。
返回:
将 string
写入到文件。 如果 string
不是一个字符串,则该值会被强制转换为字符串。
Promise
会被解决并带上一个对象,对象包含一个 bytesWritten
属性(指定写入的字节数)和一个 buffer
属性(指向写入的 string
)。
position
指定文件开头的偏移量(数据应该被写入的位置)。 如果 position
的类型不是一个 number
,则数据会被写入当前的位置。 参阅 pwrite(2)
。
encoding
是期望的字符串编码。
在同一个文件上多次使用 filehandle.write()
且不等待 Promise
被解决(或被拒绝)是不安全的。 对于这种情况,建议使用 fs.createWriteStream()
。
在 Linux 上,当以追加模式打开文件时,写入无法指定位置。 内核会忽略位置参数,并始终将数据追加到文件的末尾。
buffer |
offset
length
position
返回:
将 buffer
写入到文件。
Promise
会被解决并带上一个对象,对象包含一个 bytesWritten
属性(指定写入的字节数)和一个 buffer
属性(指向写入的 buffer
)。
offset
决定 buffer 中要被写入的部位, length
是一个整数,指定要写入的字节数。
position
指定文件开头的偏移量(数据应该被写入的位置)。 如果 typeof position !== 'number'
,则数据会被写入当前的位置。
atime | |
mtime | |
返回:
更改 FileHandle
指向的对象的文件系统时间戳,然后在成功时解决 Promise
且不带参数。
len 默认值: 0
返回:
截断文件,然后在成功时解决 Promise
且不带参数。
如果文件大于 len
个字节,则只有前面 len
个字节会保留在文件中。
如果文件小于 len
个字节,则会对其进行扩展,并且扩展部分将填充空字节('\0'
)
最后 3 个字节是空字节('\0'
),以补充超出的截断。
返回:
Promise
将会在成功时解决,且不带参数。
options
检索文件的 fs.Stats
。
options
异步地读取文件的全部内容。
Promise
被解决时会带上文件的内容。 如果没有指定字符编码(使用 options.encoding
),则数据会以 Buffer
对象返回。 否则,数据将会是一个字符串。
如果 options
是字符串,则它指定字符编码。
当 path
是目录时, fsPromises.readFile()
的行为是特定于平台的。 在 macOS、Linux 和 Windows 上,promise 将会被拒绝并带上一个错误。 在 FreeBSD 上,则将会返回目录内容的表示。
FileHandle
必须支持读取。
如果对文件句柄进行了一次或多次 filehandle.read()
调用,然后再调用 filehandle.readFile()
,则将从当前位置读取数据,直到文件结束。 它并不总是从文件的开头读取。
buffer |
offset
length
position
返回:
从文件中读取数据。
buffer
是数据将写入的缓冲区。
offset
是 buffer 中开始写入的偏移量。
length
是一个整数,指定要读取的字节数。
position
参数指定从文件中开始读取的位置。 如果 position
为 null
,则从当前文件位置读取数据,并更新文件位置。 如果 position
是整数,则文件位置将保持不变。
成功读取之后, Promise
会被解决并带上一个对象,对象上有一个 bytesRead
属性(指定读取的字节数)和一个 buffer
属性(指向传入的 buffer
参数)。
FileHandle
对象管理的数字文件描述符。
返回: Promise
将会在成功时解决,且不带参数。
返回: Promise
将会被解决,如果关闭时发生错误则将 Promise
将会被拒绝。 关闭文件描述符。
uid
gid
返回:
更改文件的所有者,然后在成功时解决 Promise
且不带参数。
mode
返回:
更改文件的权限。 Promise
将会在成功时解决,且不带参数。
data |
options
异步地将数据追加到文件,如果文件尚不存在则创建该文件。 data
可以是字符串或 Buffer
。 Promise
将会在成功时解决,且不带参数。如果 options
是字符串,则它指定字符编码。FileHandle
必须被打开用以追加。那就是要使用open了
path | |
mode 默认值: fs.constants.F_OK。
返回:
测试用户对 path
指定的文件或目录的权限。 mode
参数是一个可选的整数,指定要执行的可访问性检查。
可以创建由两个或更多个值按位或组成的掩码(例如 fs.constants.W_OK | fs.constants.R_OK
)。
如果可访问性检查成功,则 Promise
会被解决且不带值。 如果任何可访问性检查失败,则 Promise
会被拒绝并带上 Error
对象。
不建议在调用 fsPromises.open()
之前使用 fsPromises.access()
检查文件的可访问性。 这样做会引入竞态条件,因为其他进程可能会在两个调用之间更改文件的状态。 相反,应该直接打开、读取或写入文件,如果文件无法访问则处理引发的错误。
2. fsPromises.appendFile(path, data[, options])
path | | | 文件名或 FileHandle。
data |
options
异步地将数据追加到文件,如果文件尚不存在则创建该文件
data
可以是字符串或 Buffer
。 Promise
将会在成功时解决,且不带参数。如果 options
是字符串,则它指定字符编码。
path
可以指定为已打开用于追加(使用 fsPromises.open()
)的 FileHandle
。
3.fsPromises.chmod(path, mode)
path | |
mode
返回:
更改文件的权限,然后在成功时解决 Promise
且不带参数。
4.fsPromises.chown(path, uid, gid)
path | |
uid
gid
返回:
更改文件的所有者,然后在成功时解决 Promise
且不带参数。
5.fsPromises.copyFile(src, dest[, flags])
src | | 要拷贝的源文件名。
dest | | 拷贝操作的目标文件名。
flags 用于拷贝操作的修饰符。默认值: 0。
返回:
异步地将 src
拷贝到 dest
。 默认情况下,如果 dest
已经存在,则覆盖它。 Promise
将会在成功时解决,且不带参数。
Node.js 不保证拷贝操作的原子性。 如果在打开目标文件用于写入后发生错误,则 Node.js 将尝试删除目标文件。
flags
是一个可选的整数,指定拷贝操作的行为。 可以创建由两个或更多个值按位或组成的掩码(比如 fs.constants.COPYFILE_EXCL| fs.constants.COPYFILE_FICLONE
)。
fs.constants.COPYFILE_EXCL - 如果 dest 已存在,则拷贝操作将失败。
fs.constants.COPYFILE_FICLONE - 拷贝操作将尝试创建写时拷贝(copy-on-write)链接。如果平台不支持写时拷贝,则使用后备的拷贝机制。
fs.constants.COPYFILE_FICLONE_FORCE - 拷贝操作将尝试创建写时拷贝链接。如果平台不支持写时拷贝,则拷贝操作将失败。
6.fsPromises.lchmod(path, mode)
path | |
mode
返回:
更改符号链接的权限,然后在成功时解决 Promise
且不带参数。
7.fsPromises.lchown(path, uid, gid)
path | |
uid
gid
返回:
更改符号链接的拥有者,然后在成功时解决 Promise
且不带参数。
8.fsPromises.link(existingPath, newPath)
existingPath | |
newPath | |
返回:
异步的 link(2)
。 Promise
将会在成功时解决,且不带参数。
9.fsPromises.lstat(path[, options])
path | |
options
Promise
会被解决并带上用于给定的符号链接 path
的 fs.Stats
对象。
10.fsPromises.mkdir(path[, options])
path | |
options
异步地创建目录,然后在成功时解决 Promise
且不带参数。
11.fsPromises.mkdtemp(prefix[, options])
prefix
options |
创建一个唯一的临时目录,且解决 Promise
时带上创建的目录路径。 唯一的目录名称是通过在提供的 prefix
的末尾附加六个随机字符来生成的。 由于平台的不一致性,请避免在 prefix
中以 X
字符结尾。 在某些平台上,特别是 BSD,可以返回六个以上的随机字符,并用随机字符替换 prefix
中结尾的 X
字符。
可选的 options
参数可以是指定字符编码的字符串,也可以是具有指定要使用的字符编码的 encoding
属性的对象。
fsPromises.mkdtemp()
方法将六位随机选择的字符直接附加到 prefix
字符串。 例如,给定目录 /tmp
,如果打算在 /tmp
中创建临时目录,则 prefix
必须在尾部加上特定平台的路径分隔符(require('path').sep
)。
12.fsPromises.open(path, flags[, mode])
path | |
flags | 参阅支持的文件系统标志。默认值: 'r'。
mode 默认值: 0o666(可读写)。
返回:
异步地打开文件并返回一个 Promise
,当解决时会带上一个 FileHandle
对象。
mode
用于设置文件模式(权限和粘滞位),但仅限于创建文件时。有些字符 (< > : " / \ | ? *
) 在 Windows 上是预留的
13.fsPromises.opendir(path[, options])
path | |
options
异步地打开目录。创建一个 fs.Dir
,其中包含所有用于更进一步读取和清理目录的函数。encoding
选项用于在打开目录和后续的读取操作时设置 path
的字符编码。
14.fsPromises.readdir(path[, options])
path | |
options |
读取目录的内容,然后解决 Promise
并带上一个数组(包含目录中的文件的名称,但不包括 '.'
和 '..'
)。
可选的 options
参数可以是指定编码的字符串,也可以是具有 encoding
属性的对象,该属性指定用于文件名的字符编码。 如果 encoding
设置为 'buffer'
,则返回的文件名是 Buffer
对象。
如果 options.withFileTypes
设置为 true
,则解决的数组将包含 fs.Dirent
对象。
15.fsPromises.readFile(path[, options])
path | | | 文件名或 FileHandle。
options
异步地读取文件的全部内容。
Promise
被解决时会带上文件的内容。 如果没有指定字符编码(使用 options.encoding
),则数据会以 Buffer
对象返回。 否则,数据将会是一个字符串。
如果 options
是字符串,则它指定字符编码。
当 path
是目录时, fsPromises.readFile()
的行为是特定于平台的。 在 macOS、Linux 和 Windows 上,promise 将会被拒绝并带上一个错误。 在 FreeBSD 上,则将会返回目录内容的表示。
指定的 FileHandle
必须支持读取。
16.fsPromises.readlink(path[, options])
path | |
options |
Promise
会在成功时解决,且带上 linkString
。
可选的 options
参数可以是指定编码的字符串,也可以是具有 encoding
属性的对象,该属性指定用于链接路径的字符编码。 如果 encoding
设置为 'buffer'
,则返回的链接路径将作为 Buffer
对象传入。
17.fsPromises.realpath(path[, options])
path | |
options |
使用与 fs.realpath.native()
函数相同的语义来判断 path
的实际位置,然后解决 Promise
并带上解析后的路径。
仅支持可转换为 UTF8 字符串的路径。
可选的 options
参数可以是指定编码的字符串,也可以是具有 encoding
属性的对象,该属性指定用于路径的字符编码。 如果 encoding
设置为 'buffer'
,则返回的路径将作为 Buffer
对象传入。
18.fsPromises.rename(oldPath, newPath)
oldPath | |
newPath | |
返回:
将 oldPath
重命名为 newPath
,然后在成功时解决 Promise
且不带参数。
19.fsPromises.rmdir(path[, options])
path | |
options
删除 path
指定的目录,然后在成功时解决 Promise
且不带参数。
在文件(而不是目录)上使用 fsPromises.rmdir()
会导致 Promise
被拒绝,在 Windows 上会带上 ENOENT
错误、在 POSIX 上会带上 ENOTDIR
错误。
20.fsPromises.stat(path[, options])
path | |
options
Promise
会被解决并带上 fs.Stats
对象(用于给定的 path
)。
21.fsPromises.symlink(target, path[, type])
target | |
path | |
type 默认值: 'file'。
返回:
创建一个符号链接,然后在成功时解决 Promise
且不带参数。
type
参数仅在 Windows 上可用,可以是 'dir'
、 'file'
或 'junction'
之一。 Windows 上使用 'junction'
要求目标路径是绝对路径。 当使用 'junction'
时, target
参数将自动标准化为绝对路径。
22.fsPromises.truncate(path[, len])
path | |
len 默认值: 0。
返回:
截断 path
,然后在成功时解决 Promise
且不带参数。 path
必须是一个字符串或 Buffer
。
23.fsPromises.unlink(path)
path | |
返回:
Promise
将会在成功时解决,且不带参数。
24.fsPromises.utimes(path, atime, mtime)
path | |
atime | |
mtime | |
返回:
更改 path
指向的对象的文件系统时间戳,然后在成功时解决 Promise
且不带参数。
atime
和 mtime
参数遵循以下规则:
Date
对象、或类似 '123456789.0'
的数值字符串。NaN
、 Infinity
或 -Infinity
,则抛出 Error
。25.fsPromises.writeFile(file, data[, options])
file | | | 文件名或 FileHandle。
data | |
options
异步地将数据写入到一个文件,如果文件已存在则覆盖该文件。 data
可以是字符串或 buffer。 Promise
将会在成功时解决,且不带参数。
如果 data
是一个 buffer,则 encoding
选项会被忽略。
如果 options
是一个字符串,则它指定字符编码。
指定的 FileHandle
必须支持写入。
在同一个文件上多次使用 fsPromises.writeFile()
且不等待 Promise
被解决(或被拒绝)是不安全的。
总之初级方法返回的都是promise,但是需要看它有没有带什么其他的类,如果没有带其他的类,那么就用常规,如果带了其他的类,就可以使用别的方法去使用他们.