Node.js中的文件系统

2020-03-20  本文已影响0人  前白

Node.js 使用fs(File System)模块来操作文件,文件系统模块有两种不同的方法,分别是同步方法和异步方法。

同步和异步

Node.js 文件系统模块中的方法均有异步和同步版本,如同步读取文件内容的fs.readFileSync()方法,异步读取文件内容的fs.readFile()方法。

异步方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息。

在大型系统中,建议使用异步方法,同步方法将会导致进程被锁死。比起同步方法,异步方法性能更高、速度更快、而且没有阻塞。

示例:

假设有如下文件test.txt:

学互联网工作技能,上侠课岛!
同步读取文件

synchronization.js内容如下:

var fs = require("fs");
var data = fs.readFileSync('test.txt');
console.log("同步读取文件内容为:\n" + data.toString());
console.log("程序执行完毕");

启动文件:

>node synchronization.js
同步读取文件内容为:
学互联网工作技能,上侠课岛!
程序执行完毕
异步读取文件

asynchronous.js内容如下:

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
程序执行完毕
异步读取文件内容为:
学互联网工作技能,上侠课岛!

文件系统模块的使用

要使用文件系统模块,可以使用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().回调函数没有参数,但可能抛出异常。

更多可看:https://www.9xkd.com/

上一篇下一篇

猜你喜欢

热点阅读