Node.js 文件系统
Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node 导入文件系统模块(fs)语法如下所示:
1. 异步和同步
Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile()
和同步的 fs.readFileSync()
。
异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。
建议大家是用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞,但遇到像加载一些配置文件的时候,为了保证文件的顺序,则使用同步的放方法。
2. 文件完整的读写
fs.readFile(file[, options], callback)–读取整个文件
- file
<String>
| <Integer>
filename or file descriptor:文件路径名或者文件的描述 - options
<Object>
| <String>
- encoding
<String>
| <Null>
default = null - flag
<String>
default = 'r'
- callback
<Function>
:回调函数 function(err,data)
fs.writeFile(file, data[, options], callback)
- file
<String>
| <Integer>
filename or file descriptor - data
<String>
| <Buffer>
- options
<Object>
| <String>
- encoding
<String>
| <Null>
default = ‘utf8’ - mode
<Number>
default = 0666 - flag
<String>
default = ‘w’
- callback
<Function>
一个完整的读写操作:
读取文件编码一定要写,不然会读出原生buffer。
3. 从指定位置开始读取文件
fs.open(path, flags[, mode], callback)
- path 为文件的路径,
- flags 可以是以下值。
r :以读取模式打开文件。
r+ :以读写模式打开文件。
w :以写入模式打开文件,如果文件不存在则创建。
w+ :以读写模式打开文件,如果文件不存在则创建。
a :以追加模式打开文件,如果文件不存在则创建。
a+ :以读取追加模式打开文件,如果文件不存在则创建。 - mode 参数用于创建文件时给文件指定权限,默认是 0666。回调函数将会传递一个文 件描述符 fd。
fs.read(fd, buffer, offset, length, position, callback)
- fd: open 打开的中回调函数的fd,表示一个文件描述符.
- buffer:一个Buffer对象,将文件数据读取到那个缓冲区。
- offset:从缓冲区哪里开始写入.
- length:从文件中读取的字节数.
- position:从文件那个位置开始读。
- callback:function (err, bytesRead, buffer).
- err: 发生错误,byteRead,实际读取的文件字节数,position+length可能大于文件的字节数,buffer 被读取的缓冲对象
position如果设置为null,则从上次读的位置接着往下读。
- fs.write(fd, buffer, offset, length[, position], callback)
fs.write将buffer缓冲器内容写入fd文件描述符, - offset和length决定了将缓冲器中的哪部分写入文件。
- position指明将数据写入文件从头部算起的偏移位置,若position为null,数据将从当前位置开始写入
- callback 回调函数接受两个参数(err, written),其中written标识有多少字节的数据已经写入
注意:写完后要关闭它
追加写入:
- fs.close(fd, [callback]):关闭文件,有open,就有关闭
- fs.fsync(fd, [callback]):确保缓冲区的文件全部被写入,close之前。
4、创建于读取目录
创建目录
以下为创建目录的语法格式:
参数使用说明如下:
- path - 文件路径。
- mode - 设置目录权限,默认为 0777。
- callback - 回调函数,没有参数。
以上代码执行结果如下:
读取目录
以下为读取目录的语法格式:
参数使用说明如下:
- path - 文件路径。
- callback - 回调函数,回调函数带有两个参数err, files,err 为错误信息,- files 为 目录下的文件数组列表。
以上代码执行结果如下:
删除目录
以下为删除目录的语法格式:
参数使用说明如下:
- path - 文件路径。
- callback - 回调函数,没有参数。
以上代码执行结果如下:
……
5. 其他一些操作
-
fs.rename(path1, path2, [callback]),fs.renameSync(path1, path2)
重命名某个文件,前者异步调用,后者同步调用。除非回调函数执行过程出现了异常,否则不会传递任何参数。 例如:
- fs.truncate(fd,len,[callback]),fs.trucateSync(fd,len)
异步调用截断某个文件,如果执行过程中出现异常,回调函数接收一个参数(err),否则不传递任何参数。
- fs.chmod(path, mode, [callback]) 和 fs.chmodSync(path, mode)
修改文件权限,主要说下第二个参数,实际上是:-rwxrwxrwx,三个一组,r:4、w:2、x:1、-: 0。可以 参考 http://zh.wikipedia.org/zh/Chmod
fs.stat(path, [callback]),
fs.lstat(path, [callback]),
fs.fstat(fd, [callback]) 和 fs.statSync(path)、fs.lstatSync(path)、fs.fstatSync(fd)
读取文件元信息,回调函数将返回两个参数(err, stats),其中stats是fs.Stats的一个对象.者的区别在于:
第一个是返回文件的信息,参数是路径
第二个是和第一个一样,当路径是文件链接时,返回这个链接文件的信息
第三个是传递参数为fd文件描述符
fs.link(srcpath, dstpath, [callback])、fs.linkSync(srcpath, dstpath) 和 fs.symlink(linkdata, path, [callback])、fs.symlinkSync(linkdata, path)
建立文件链接,除非回调函数执行过程出现了异常,否则不会传递任何参数。link和symlink的区别是: link 创建的是hard link 所谓硬链接 symlink创建的是symbolic link 所谓符号链接 硬链接就是备份,软连接就是快捷方式
fs.readlink(path, [callback])、fs.realpath(path, [callback]) 、fs.unlink(path, [callback])和 fs.readlinkSync(path)、fs.realpathSync(path)、fs.unlinkSync(path)
异步调用readlink,回调函数返回两个参数(err,resolvedPath),resolvedPath为解析后的文件路径。 这3个函数分别是:
1、readlink:读取链接源地址
3、unlink:删除某一个文件链接
fs.rmdir(path, [callback])、
fs.mkdir(path, mode, [callback])、
fs.readdir(path, [callback]) 和 fs.rmdirSync(path)、fs.mkdirSync(path, mode)、fs.readdirSync(path)
三个命令分别是: rmdir:删除目录 mkdir:建立目录 readdir:读取目录中的内容。回调函数接受两个参数(err, files),其中files参数是保存了目录中所有文件名的数组(’.’和’..’除外)。
fs.watchFile监听指定文件filename的变化,回调函数listener将在每次该文件被访问时被调用.
第二个参数[options]是可选项,如果指定了options参数,它应该是一个包含如下内容的对象:名为persistent的布尔值,和名为interval单位为毫秒的轮询时间间隔,默认值为{ persistent: true, interval: 0 }。 listener监听器将获得两个参数(curr, prev),分别标识当前的状态对象和改变前的状态对象,这些状态对象为fs.Stat的实例。
fs.unwatchFile停止监听文件filename的变化。
fs.Stats
fs.stat()和 fs.lstat()方法返回的对象为此类型
- stats.isFile()
- stats.isDirectory()
- stats.isBlockDevice()
- stats.isCharacterDevice()
- stats.isSymbolicLink() (only valid with fs.lstat()) stats.isSymbolicLink() (仅对fs.lstat()有效)
- stats.isFIFO()
- stats.isSocket()
Node.js 文件系统
Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node 导入文件系统模块(fs)语法如下所示:
1. 异步和同步
Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile()
和同步的 fs.readFileSync()
。
异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。
建议大家是用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞,但遇到像加载一些配置文件的时候,为了保证文件的顺序,则使用同步的放方法。
2. 文件完整的读写
fs.readFile(file[, options], callback)–读取整个文件
- file
<String>
| <Integer>
filename or file descriptor:文件路径名或者文件的描述 - options
<Object>
| <String>
- encoding
<String>
| <Null>
default = null - flag
<String>
default = 'r'
- callback
<Function>
:回调函数 function(err,data)
fs.writeFile(file, data[, options], callback)
- file
<String>
| <Integer>
filename or file descriptor - data
<String>
| <Buffer>
- options
<Object>
| <String>
- encoding
<String>
| <Null>
default = ‘utf8’ - mode
<Number>
default = 0666 - flag
<String>
default = ‘w’
- callback
<Function>
一个完整的读写操作:
读取文件编码一定要写,不然会读出原生buffer。
3. 从指定位置开始读取文件
fs.open(path, flags[, mode], callback)
- path 为文件的路径,
- flags 可以是以下值。
r :以读取模式打开文件。
r+ :以读写模式打开文件。
w :以写入模式打开文件,如果文件不存在则创建。
w+ :以读写模式打开文件,如果文件不存在则创建。
a :以追加模式打开文件,如果文件不存在则创建。
a+ :以读取追加模式打开文件,如果文件不存在则创建。 - mode 参数用于创建文件时给文件指定权限,默认是 0666。回调函数将会传递一个文 件描述符 fd。
fs.read(fd, buffer, offset, length, position, callback)
- fd: open 打开的中回调函数的fd,表示一个文件描述符.
- buffer:一个Buffer对象,将文件数据读取到那个缓冲区。
- offset:从缓冲区哪里开始写入.
- length:从文件中读取的字节数.
- position:从文件那个位置开始读。
- callback:function (err, bytesRead, buffer).
- err: 发生错误,byteRead,实际读取的文件字节数,position+length可能大于文件的字节数,buffer 被读取的缓冲对象
position如果设置为null,则从上次读的位置接着往下读。
- fs.write(fd, buffer, offset, length[, position], callback)
fs.write将buffer缓冲器内容写入fd文件描述符, - offset和length决定了将缓冲器中的哪部分写入文件。
- position指明将数据写入文件从头部算起的偏移位置,若position为null,数据将从当前位置开始写入
- callback 回调函数接受两个参数(err, written),其中written标识有多少字节的数据已经写入
注意:写完后要关闭它
追加写入:
- fs.close(fd, [callback]):关闭文件,有open,就有关闭
- fs.fsync(fd, [callback]):确保缓冲区的文件全部被写入,close之前。
4、创建于读取目录
创建目录
以下为创建目录的语法格式:
参数使用说明如下:
- path - 文件路径。
- mode - 设置目录权限,默认为 0777。
- callback - 回调函数,没有参数。
以上代码执行结果如下:
读取目录
以下为读取目录的语法格式:
参数使用说明如下:
- path - 文件路径。
- callback - 回调函数,回调函数带有两个参数err, files,err 为错误信息,- files 为 目录下的文件数组列表。
以上代码执行结果如下:
删除目录
以下为删除目录的语法格式:
参数使用说明如下:
- path - 文件路径。
- callback - 回调函数,没有参数。
以上代码执行结果如下:
……
5. 其他一些操作
-
fs.rename(path1, path2, [callback]),fs.renameSync(path1, path2)
重命名某个文件,前者异步调用,后者同步调用。除非回调函数执行过程出现了异常,否则不会传递任何参数。 例如:
- fs.truncate(fd,len,[callback]),fs.trucateSync(fd,len)
异步调用截断某个文件,如果执行过程中出现异常,回调函数接收一个参数(err),否则不传递任何参数。
- fs.chmod(path, mode, [callback]) 和 fs.chmodSync(path, mode)
修改文件权限,主要说下第二个参数,实际上是:-rwxrwxrwx,三个一组,r:4、w:2、x:1、-: 0。可以 参考 http://zh.wikipedia.org/zh/Chmod
fs.stat(path, [callback]),
fs.lstat(path, [callback]),
fs.fstat(fd, [callback]) 和 fs.statSync(path)、fs.lstatSync(path)、fs.fstatSync(fd)
读取文件元信息,回调函数将返回两个参数(err, stats),其中stats是fs.Stats的一个对象.者的区别在于:
第一个是返回文件的信息,参数是路径
第二个是和第一个一样,当路径是文件链接时,返回这个链接文件的信息
第三个是传递参数为fd文件描述符
fs.link(srcpath, dstpath, [callback])、fs.linkSync(srcpath, dstpath) 和 fs.symlink(linkdata, path, [callback])、fs.symlinkSync(linkdata, path)
建立文件链接,除非回调函数执行过程出现了异常,否则不会传递任何参数。link和symlink的区别是: link 创建的是hard link 所谓硬链接 symlink创建的是symbolic link 所谓符号链接 硬链接就是备份,软连接就是快捷方式
fs.readlink(path, [callback])、fs.realpath(path, [callback]) 、fs.unlink(path, [callback])和 fs.readlinkSync(path)、fs.realpathSync(path)、fs.unlinkSync(path)
异步调用readlink,回调函数返回两个参数(err,resolvedPath),resolvedPath为解析后的文件路径。 这3个函数分别是:
1、readlink:读取链接源地址
3、unlink:删除某一个文件链接
fs.rmdir(path, [callback])、
fs.mkdir(path, mode, [callback])、
fs.readdir(path, [callback]) 和 fs.rmdirSync(path)、fs.mkdirSync(path, mode)、fs.readdirSync(path)
三个命令分别是: rmdir:删除目录 mkdir:建立目录 readdir:读取目录中的内容。回调函数接受两个参数(err, files),其中files参数是保存了目录中所有文件名的数组(’.’和’..’除外)。
fs.watchFile监听指定文件filename的变化,回调函数listener将在每次该文件被访问时被调用.
第二个参数[options]是可选项,如果指定了options参数,它应该是一个包含如下内容的对象:名为persistent的布尔值,和名为interval单位为毫秒的轮询时间间隔,默认值为{ persistent: true, interval: 0 }。 listener监听器将获得两个参数(curr, prev),分别标识当前的状态对象和改变前的状态对象,这些状态对象为fs.Stat的实例。
fs.unwatchFile停止监听文件filename的变化。
fs.Stats
fs.stat()和 fs.lstat()方法返回的对象为此类型
- stats.isFile()
- stats.isDirectory()
- stats.isBlockDevice()
- stats.isCharacterDevice()
- stats.isSymbolicLink() (only valid with fs.lstat()) stats.isSymbolicLink() (仅对fs.lstat()有效)
- stats.isFIFO()
- stats.isSocket()