美文网首页
node之文件系统(fs)(三)

node之文件系统(fs)(三)

作者: 笑红尘123 | 来源:发表于2019-11-24 08:14 被阅读0次

    一、什么是fs?

    fs模块是Node.js的一个核心模块,专门用来操作系统中的文件,常用的操作方式是对文件的读取和写入使用require('fs')载入fs模块,模块中所有方法都有同步和异步两种形式。异步方法中回调函数的第一个参数总是留给异常参数(exception),如果方法成功完成,该参数为null或undefined。异步写法demo:有一个回调函数。在了解文件操作的方法之前有一些关于系统和文件的前置知识,如文件的权限位 mode 、标识位 flag 、文件描述符 fd 等,所以在了解 fs 方法的之前会先将这几个概念明确。

    二、fs之权限

    文件权限表:
    权限分配 文件所有者 文件所属组 其他用户
    权限项 读 写 执行 读 写 执行 读 写 执行
    字符表示 r w x r w x r w x
    数字表示 4 2 1 4 2 1 4 2 1

    三、fs之标识

    NodeJS 中,标识位代表着对文件的操作方式,如可读、可写、即可读又可写等等,例如下面即可说明其含义
    符号含义:
    r 读取文件,如果文件不存在则抛出异常。
    r+ 读取并写入文件,如果文件不存在则抛出异常。
    rs 读取并写入文件,指示操作系统绕开本地文件系统缓存。
    w 写入文件,文件不存在会被创建,存在则清空后写入。
    wx 写入文件,排它方式打开。
    w+ 读取并写入文件,文件不存在则创建文件,存在则清空后写入。
    wx+ 和 w+ 类似,排他方式打开。
    a 追加写入,文件不存在则创建文件。
    ax 与 a 类似,排他方式打开。
    a+ 读取并追加写入,不存在则创建。
    ax+ 与 a+ 类似,排他方式打开。
    r:读取
    w:写入
    s:同步
    +:增加相反操作
    x:排他方式
    r+ 和 w+ 的区别,当文件不存在时, r+ 不会创建文件,而会抛出异常,但 w+ 会创建文件;如果文件存在, r+ 不会自动清空文件,但 w+ 会自动把已有文件的内容清空。

    四、文件操作

    1、文件读取
    (1)异步读取方法 readFile
    异步读取方法 readFile 与 readFileSync 的前两个参数相同,最后一个参数为回调函数,函数内有两个参数 err (错误)和 data (数据),该方法没有返回值,回调函数在读取文件成功后执行。
    依然读取 1.txt 文件:
    异步读取 readFile

    var fs=require("fs")
    fs.readfile("./1.txt",(err,data)=>{
        if(err) throw err
        console.log(data)   //1.txt里面的数据
    })
    

    (2)同步读取readFileSync
    readFileSync 有两个参数:
    第一个参数为读取文件的路径或文件描述符;
    第二个参数为 options ,默认值为 null ,其中有 encoding (编码,默认为 null )和 flag (标识位,默认为 r ),也可直接传入 encoding ;
    返回值为文件的内容,如果没有 encoding ,返回的文件内容为 Buffer,如果有按照传入的编码解析。
    若现在有一个文件名为 1.txt ,内容为 “Hello”,现在使用 readFileSync 读取。
    同步读取 readFileSync

    const fs = require("fs");
    let data = fs.readFileSync("1.txt");   //同时也可以设置编码格式  utf8
    console.log(data); // Hello复制代码
    

    2、打开文件 open
    open 方法有四个参数:
    path:文件的路径;
    flag:标识位;
    mode:权限位,默认 0o666 ;
    callback:回调函数,有两个参数 err (错误)和 fd (文件描述符),打开文件后执行。
    异步打开文件

    var fs=require("fs")
    fs.open("./1.txt","r",(err,fd)=>{
        console.log(fd)
        fs.open("./2.txt","r",(err,fd)=>{
             console.log(fd)
        })
    })
    

    3.关闭文件 close
    close 方法有两个参数,第一个参数为关闭文件的文件描述符 fd ,第二参数为回调函数,回调函数有一个参数 err (错误),关闭文件后执行。
    异步关闭文件

    var fs=require("fs")
    fs.open("./1.txt","r",(err,fd)=>{
         fs.close(fd,(err)=>{
            console.log("关闭成功")
         })
    })
    

    4.读取文件 read
    read 方法与 readFile 不同,一般针对于文件太大,无法一次性读取全部内容到缓存中或文件大小未知的情况,都是多次读取到 Buffer 中。

    想了解 Buffer 可以看 NodeJS —— Buffer 解读

    read 方法中有六个参数:

    • fd:文件描述符,需要先使用 open 打开;
    • buffer:要将内容读取到的 Buffer;
    • offset:整数,向 Buffer 写入的初始位置;
    • length:整数,读取文件的长度;
    • position:整数,读取文件初始位置;
    • callback:回调函数,有三个参数 err (错误), bytesRead (实际读取的字节数), buffer (被写入的缓存区对象),读取执行完成后执行。
      下面读取一个 1.txt 文件,内容为 “hello node”。
    const fs = require("fs");
    let buf = Buffer.alloc(6);
    
    // 打开文件
    fs.open("1.txt", "r", (err, fd) => {
        // 读取文件
        fs.read(fd, buf, 0, 3, 0, (err, bytesRead, buffer) => {
            console.log(bytesRead);
            console.log(buffer);
            // 继续读取
            fs.read(fd, buf, 3, 3, 3, (err, bytesRead, buffer) => {
                console.log(bytesRead);
                console.log(buffer);
                console.log(buffer.toString());
            });
        });
    });
    

    5.同步磁盘缓存
    fsync 方法有两个参数,第一个参数为文件描述符 fd ,第二个参数为回调函数,回调函数中有一个参数 err (错误),在同步磁盘缓存后执行。
    在使用 write 方法向文件写入数据时,由于不是一次性写入,所以最后一次写入在关闭文件之前应先同步磁盘缓存, fsync 方法将在后面配合 write 一起使用。
    后续会继续完善,如果感觉有帮助请给予一个宝贵的赞!或者给小编一个赞赏!!

    相关文章

      网友评论

          本文标题:node之文件系统(fs)(三)

          本文链接:https://www.haomeiwen.com/subject/xsqtwctx.html