Node.js 中咱们能够使用 fs(File System) 模块来操做文件,文件系统模块有两种不一样的方法,分别是同步方法和异步方法。html
Node.js 文件系统模块中的方法均有异步和同步版本,例如同步读取文件内容能够使用 fs.readFileSync()
方法,而异步读取文件内容能够使用 fs.readFile()
方法。node
异步方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息。segmentfault
在大型系统中,通常咱们会使用异步方法,由于同步方法容易致使进程被锁死。因此比起同步方法,异步方法的性能更高、速度更快、并且没有阻塞。数组
假设有一个test.txt文件的内容以下所示:app
学互联网工做技能,上侠课岛!
咱们使用同步方法来读取上面这个文件中的内容,建立一个名为 synchronization.js 的文件,文件中的内容以下,使用readFileSync()
方法读取内容:异步
var fs = require("fs"); var data = fs.readFileSync('test.txt'); console.log("同步读取文件内容为:\n" + data.toString()); console.log("程序执行完毕");
启动这个 Node.js 文件,就会成功读取文件中的内容,以下所示:async
>node synchronization.js 同步读取文件内容为: 学互联网工做技能,上侠课岛! 程序执行完毕
使用异步方法读取 test.txt 文件中的内容,咱们只须要将 readFileSync()
方法替换成 readFile()
方法。 建立一个名为 asynchronous.js 的文件,文件中的内容以下所示,在使用 readFile()
方法时,注意第二个参数是一个回调函数,包含了错误信息:函数
var fs = require("fs") fs.readFile('test.txt', function(err,data){ if(err){ return console.error(err); } console.log("异步读取文件内容为:\n"+data.toString()); }); console.log("程序执行完毕");
启动这个文件,会输出以下所示内容:性能
>node asynchronous.js 程序执行完毕 异步读取文件内容为: 学互联网工做技能,上侠课岛!
要使用文件系统模块 fs,首先须要使用require()方法引入模块,这个咱们之前已经讲过好几回啦,语法以下所示:测试
var fs = require('fs');
引入模块后,咱们能够经过这个模块,能够实现打开文件、读取文件、写入文件、关闭文件等操做。
在异步模式下打开文件的语法以下所示:
fs.open(path, flags[, mode], callback)
path
:文件路径。flags
:文件打开行为。mode
:文件模式。callback
:回调函数,带有两个参数:err和fd。var fs = require("fs"); console.log("准备打开文件") fs.open('test.txt', 'r+', function(err, fd) { if (err) { return console.error(err); } console.log("文件打开成功!"); });
启动这个文件,会成功输出以下内容:
> node openfile.js 准备打开文件 文件打开成功!
异步模式下读取文件的语法为:
fs.read(fd, buffer, offset, length, position, callback)
fd
:文件描述符。buffer
:数据写入的缓冲区。offset
:缓冲区写入的写入偏移量。length
:要从文件中读取的字节数。position
:文件读取的起始位置,如值为null,则会从当前文件指针的位置读取。callback
:回调函数,带有三个参数:err错误信息、bytesRead读取的字节数、buffer缓冲区对象。var fs = require("fs"); var buf = new Buffer.alloc(1024); console.log("准备打开文件"); fs.open('test.txt', 'r+', function(err, fd){ if(err){ return console.error(err); } console.log("文件打开成功!\n"); console.log("开始读取文件!"); fs.read(fd, buf, 0, buf.length, 0, function(err,bytes){ if(err){ console.log(err); } console.log("总共有读取了" + bytes + "个字节"); if(bytes > 0){ console.log("读取的内容为:" + "\n" + buf.slice(0, bytes).toString()); } }); });
启动这个文件,输出以下内容,则表示读取文件操做成功:
>node readfile.js 准备打开文件 文件打开成功! 开始读取文件! 总共有读取了42个字节 读取的内容为: 学互联网工做技能,上侠课岛!
异步模式下写入文件的语法为:
fs.writeFile(file, data[, options], callback)
file
:文件名或文件描述符。data
:要写入文件的数据,能够是 String(字符串) 或 Buffer(缓冲) 对象。options
:该参数是一个对象,包含 {encoding, mode, flag}。默认编码为utf8,模式为 0666,flag为'w'。callback
:回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。var fs = require("fs"); console.log("准备写入文件"); fs.writeFile('write.txt', '这里是要写入的数据内容', function(err){ if (err) { return console.error(err); } console.log("数据写入成功!"); });
启动文件,write.txt中成功被写内容:
> node writefile.js 准备写入文件 数据写入成功!
异步模式下关闭文件的语法为:
fs.close(fd, callback)
fd
:经过fs.open()方法返回的文件描述符。callback
:回调函数,没有参数。var fs = require("fs"); console.log("准备开文件") fs.open('test.txt', 'r+', function(err, fd) { if (err) { return console.error(err); } console.log("文件打开成功!\n"); //关闭文件 console.log("准备关闭文件"); fs.close(fd,function(err){ if(err) { console.log(err); } console.log('文件关闭成功!'); }); });
启动文件:
> node close.js 准备开文件 文件打开成功! 准备关闭文件 文件关闭成功!
方法 | 描述 |
---|---|
fs.rename(oldPath, newPath, callback) | 异步 rename(),回调函数没有参数,但可能抛出异常 |
fs.ftruncate(fd, len, callback) | 异步 ftruncate(),回调函数没有参数,但可能抛出异常 |
fs.ftruncateSync(fd, len) | 同步 ftruncate() |
fs.truncate(path, len, callback) | 异步 truncate(),回调函数没有参数,但可能抛出异常 |
fs.truncateSync(path, len) | 同步 truncate() |
fs.chown(path, uid, gid, callback) | 异步 chown(),回调函数没有参数,但可能抛出异常 |
fs.chownSync(path, uid, gid) | 同步 chown() |
fs.fchown(fd, uid, gid, callback) | 异步 fchown(),回调函数没有参数,但可能抛出异常 |
fs.fchownSync(fd, uid, gid) | 同步 fchown() |
fs.lchown(path, uid, gid, callback) | 异步 lchown(),回调函数没有参数,但可能抛出异常 |
fs.lchownSync(path, uid, gid) | 同步 lchown() |
fs.chmod(path, mode, callback) | 异步 chmod(),回调函数没有参数,但可能抛出异常。 |
fs.chmodSync(path, mode) | 同步 chmod() |
fs.fchmod(fd, mode, callback) | 异步 fchmod(),回调函数没有参数,但可能抛出异常 |
fs.fchmodSync(fd, mode) | 同步 fchmod() |
fs.lchmod(path, mode, callback) | 异步 lchmod().回调函数没有参数,但可能抛出异常。Only available on Mac OS X |
fs.lchmodSync(path, mode) | 同步 lchmod() |
fs.stat(path, callback) | 异步 stat(). 回调函数有两个参数 err, stats,stats 是 fs.Stats 对象 |
fs.lstat(path, callback) | 异步 lstat(). 回调函数有两个参数 err, stats,stats 是 fs.Stats 对象 |
fs.fstat(fd, callback) | 异步 fstat(). 回调函数有两个参数 err, stats,stats 是 fs.Stats 对象 |
fs.statSync(path) | 同步 stat(). 返回 fs.Stats 的实例 |
fs.lstatSync(path) | 同步 lstat(). 返回 fs.Stats 的实例 |
fs.fstatSync(fd) | 同步 fstat(). 返回 fs.Stats 的实例 |
fs.link(srcpath, dstpath, callback) | 异步 link().回调函数没有参数,但可能抛出异常 |
fs.linkSync(srcpath, dstpath) | 同步 link() |
fs.symlink(srcpath, dstpath[, type], callback) | 异步 symlink().回调函数没有参数,但可能抛出异常。 type 参数能够设置为 'dir', 'file', 或 'junction' (默认为 'file') |
fs.symlinkSync(srcpath, dstpath[, type]) | 同步 symlink(). |
fs.readlink(path, callback) | 异步 readlink(). 回调函数有两个参数 err, linkString |
fs.realpath(path[, cache], callback) | 异步 realpath(). 回调函数有两个参数 err, resolvedPath |
fs.realpathSync(path[, cache]) | 同步 realpath()。返回绝对路径 |
fs.unlink(path, callback) | 异步 unlink(),回调函数没有参数,但可能抛出异常 |
fs.unlinkSync(path) | 同步 unlink(). |
fs.rmdir(path, callback) | 异步 rmdir(),回调函数没有参数,但可能抛出异常 |
fs.rmdirSync(path) | 同步 rmdir(). |
fs.mkdir(path[, mode], callback) | S异步 mkdir(2),回调函数没有参数,但可能抛出异常。 访问权限默认为 0777 |
fs.mkdirSync(path[, mode]) | 同步 mkdir(). |
fs.readdir(path, callback) | 异步 readdir(3),读取目录的内容 |
fs.readdirSync(path) | 同步 readdir(),文件数组列表 |
fs.close(fd, callback) | 异步 close(),回调函数没有参数,但可能抛出异常 |
fs.closeSync(fd) | 同步 close(). |
fs.open(path, flags[, mode], callback) | 异步打开文件。 |
fs.openSync(path, flags[, mode]) | 同步 version of fs.open(). |
fs.utimes(path, atime, mtime, callback) | |
fs.utimesSync(path, atime, mtime) | 修改文件时间戳,文件经过指定的文件路径。 |
fs.futimes(fd, atime, mtime, callback) | |
fs.futimesSync(fd, atime, mtime) | 修改文件时间戳,经过文件描述符指定。 |
fs.fsync(fd, callback) | 异步 fsync.回调函数没有参数,但可能抛出异常。 |
fs.fsyncSync(fd) | 同步 fsync. |
fs.write(fd, buffer, offset, length[, position], callback) | 将缓冲区内容写入到经过文件描述符指定的文件。 |
fs.write(fd, data[, position[, encoding]], callback) | 经过文件描述符 fd 写入文件内容。 |
fs.writeSync(fd, buffer, offset, length[, position]) | 同步版的 fs.write()。 |
fs.writeSync(fd, data[, position[, encoding]]) | 同步版的 fs.write(). |
fs.read(fd, buffer, offset, length, position, callback) | 经过文件描述符 fd 读取文件内容。 |
fs.readSync(fd, buffer, offset, length, position) | 同步版的 fs.read. |
fs.readFile(filename[, options], callback) | 异步读取文件内容。 |
fs.readFileSync(filename[, options]) | |
fs.writeFile(filename, data[, options], callback) | 异步写入文件内容。 |
fs.writeFileSync(filename, data[, options]) | 同步版的 fs.writeFile。 |
fs.appendFile(filename, data[, options], callback) | 异步追加文件内容。 |
fs.appendFileSync(filename, data[, options]) | The 同步 version of fs.appendFile. |
fs.watchFile(filename[, options], listener) | 查看文件的修改。 |
fs.unwatchFile(filename[, listener]) | 中止查看 filename 的修改。 |
fs.watch(filename[](#)) | 查看 filename 的修改,filename 能够是文件或目录。返回 fs.FSWatcher 对象。 |
fs.exists(path, callback) | 检测给定的路径是否存在。 |
fs.existsSync(path) | 同步版的 fs.exists. |
fs.access(path[, mode], callback) | 测试指定路径用户权限。 |
fs.accessSync(path[, mode]) | 同步版的 fs.access。 |
fs.createReadStream(path[, options]) | 返回ReadStream 对象。 |
fs.createWriteStream(path[, options]) | 返回 WriteStream 对象。 |
fs.symlink(srcpath, dstpath[, type], callback) | 异步 symlink().回调函数没有参数,但可能抛出异常。 |