nodeJS

来源:互联网 发布:安卓大尺度直播软件 编辑:程序博客网 时间:2024/06/04 00:41

fs 文件系统

说明

fsfilesystem 的缩写,此模块提供本地文件的读写能力,几乎对所有模块都提供异步和同步两种操作方式,异步方法的最后一个参数都是一个回调函数,传递给回调函数的参数取决于具体方法,但回调函数的第一个参数都会保留给异常;当使用同步方法时,任何异常都会被立即抛出

参考

  • Node.js 文档
  • JavaScript 标准参考教程 Node.js

1. 可访问性检查 access() accessSync()

旧版使用 exists() 判断给定路径是否存在 最新版已废弃,一共三个参数:

  • 1)path: 指定文件或者目录
  • 2)mode: 可选参数,指定要执行的可访问性检查,默认查询文件是否存在
  • 3)callback: 回调函数,参数 err

不建议在调用 fs.open() 、 fs.readFile() 或 fs.writeFile() 之前使用 fs.access() 检查一个文件的可访问性。 如此处理会造成紊乱情况,因为其他进程可能在两个调用之间改变该文件的状态。 作为替代,用户代码应该直接打开/读取/写入文件,当文件无法访问时再处理错误。

    const fs = require('fs');    fs.access('./test.js', function (err) {        console.log(err ? '不可访问' : '可访问');     })    fs.accessSync('./text.js'); // 直接报错

2. 打开文件 open() openSync()

参数:

  • 1)path: 要打开的文件
  • 2)flags: 以什么模式打开文件 r 读取模式 r+ 读写模式…
  • 3)mode: 可选,文件模式
  • 4)callback: 回调函数,参数 err fd
    const fs = require('fs');    fs.open('./router.js', 'a+', function (err, fd) {        if (!err) {            console.log(fd);        } else {            console.log(err);        }    })    fs.openSync('./router.js', 'a+');

3. 读取文件 readFile(),readFileSync()

三个参数,

  • 1)文件路径,可以是绝对路径,也可以是相对路径(相对于当前进程的路径);
  • 2)可以省略的参数,可以设置文件编码;
  • 3)回调函数,提供两个参数 err 错误信息和 data 读取的数据
    fs.readFile('./output.txt', 'utf-8', function (err, data) {        console.log('err', err);        console.log('data', data);    })    const fileData = fs.readFileSync('./output.txt', 'utf-8');

4. 写入文件 writeFile(),writeFileSync()

写入数据到文件,如果文件已经存在则替代文件,可以有四个参数:

  • 1)file: 文件名或者文件描述符;
  • 2)要写入的数据;
  • 3)可选参数,一些配置信息;
  • 4)回调函数,参数 err 错误信息
    const fs = require('fs');    fs.writeFile('./op.js', 'const a = "a";', 'utf-8', function (err) {        console.log(err); // null    })    fs.writeFileSync('./op.js', 'const b = "a";', 'utf-8');

5. 追加数据到文件 appendFile() appendFileSync()

追加数据到文件,如果文件不存在则创建文件

  • 1)file: 文件名或者文件描述符
  • 2)data: 要写入的数据
  • 3)options: 配置
  • 4)callback: 回调,参数 err
    const fs = require('fs');    fs.appendFile('./test.txt', 'this is append', function (err) {        console.log(err ? '失败' : '成功');    })    fs.appendFileSync('./test.txt', 'this is appendSync');
  • 1) 要删除的文件路径
  • 2)callback: 回调,参数 err
    const fs = require('fs');    fs.unlink('./output/output.txt', function (err) {        console.log(err);    })    fs.unlinkSync('./output/output.txt');

7. 创建目录 mkdir() mkdirSync()

三个参数

  • 1)path: 要创建的目录名
  • 2)选填,权限值
  • 3)callback: 回调函数,参数 err
    const fs = require('fs');    fs.mkdir('./output', function (err) {        console.log(err);    })    fs.mkdirSync('./output'); // 直接报错,重复创建相同目录

8. 读取目录 readdir() readdirSync()

三个参数

  • 1)path 目录路径
  • 2)options 配置项,可配置编码
  • 3)callback 回调,参数: err 错误信息;files:目录下文件名数组
    const fs = require('fs');    fs.readdir('./', function (err, files) {        console.log(err || files);    })    console.log(fs.readdirSync('./'));

9. 查询文件目录具体信息 stat() statSync()

stat方法的参数是一个文件或目录,它产生一个对象,该对象包含了该文件或目录的具体信息。我们往往通过该方法,判断正在处理的到底是一个文件,还是一个目录。

  • 1)path: 目录路径
  • 2)callback: 回调,参数:err 错误信息;stats 目录具体信息对象

stats 对象的属性

  • stats.isFile() 是否是文件
  • stats.isDirectory() 是否是目录
  • atime、atimeMs 访问时间
  • mtime、mtimeMs 修改时间
  • ctime、ctimeMs 变化时间
  • birthtime、birthtimeMs 创建时间
    fs.readdir('./', function (err, files) {        if (!err) {            files.forEach((file) => {                fs.stat('./' + file, function (error, stats) {                    if (!error) {                        console.log(file, 'is FILE', stats.isFile());                        console.log(file, 'is DIR', stats.isDirectory());                    }                })            })        }    })    const stats = fs.statSync('./');

10. 移除文件夹 rmdir() rmdirSync()

  • 1)path: 文件夹路径, 注意删除时,文件夹内不能有文件
  • 2)callback: 回调,参数 err
    const fs = require('fs');    fs.rmdir('./output', function (err) {        console.log(err || '成功');    })    fs.rmdirSync('./output');

11. 监视文件变化 watchFile() unwatchfile() watch()

watchFile 监听一个文件,如果该文件发生变化,就会自动触发回调函数; unwatchfile 停止监视文件变化

watchFile()

  • 1)filename: 文件名
  • 2)options:可选配置:persistent 表示进程是否继续;interval 轮询时间间隔
  • 3)listener: 监听函数,参数:current 当前文件状态; prev 之前的文件状态

unwatchfile()

  • 1)filename: 文件名,停止监听此文件的变化
  • 2)listener:可选,表示移除特定的监听器,否则移除所有的监听器

watch()watchFileunwatchfile更高效的监听方法

  • 1)filename: 文件或者目录
  • 2)options: 可选配置项,persistent 表示进程是否继续;recursive 是否递归子目录,监视全部子目录,默认 false;encoding 文件编码
  • 3)listener:监听函数, 参数 eventType:rename 或者 change ; filename: 触发事件的文件名

fs.watch API 不是 100% 跨平台一致的,且在某些情况下不可用。递归选项只支持 macOS 和 Windows。

    const fs = require('fs');    fs.watchFile('./test.txt', function (curr, prev) {        console.log(curr);        console.log('+++++++++ ========= ==+++++++++++');        console.log(prev);        fs.unwatchFile('./test.txt'); // 一次修改就停止监听    })    // ================================================ //    const fs = require('fs');    const a = fs.watch('./test.txt', function (eventType, fileName) {        console.log(eventType);        console.log('====== =++++++++ == ========');        console.log(fileName);        this.close(); // close 方法停止监视    })

12. 创建可读流和可写流 createReadStream() createWriteStream()

createReadStream 用于返回一个新建的 ReadStream 对象,参数如下:

  • 1)path: 文件名
  • 2)options:配置

createWriteStream 用于返回一个新建的 WriteStream 对象,参数如下:

  • 1)path:目标文件路径
  • 2)options:配置
    fs.createReadStream('text.txt');    fs.createWriteStream('text.txt');
原创粉丝点击