zoukankan      html  css  js  c++  java
  • Node学习6-fs模块

    fs里面所有的方法都有同步和异步的形式。

    xxxx:异步

    xxxxSync:同步

    异步方法中,最后一个参数都是一个回调函数,回调函数的第一个参数一般是err

    const fs = require('fs');
    
    //删除文件
    //有任何异常都会直接捕捉到err里面,不会向外抛出,也可以自行抛出
    fs.unlink('/tmp/hello', (err) => {
      if (err) throw err;
      console.log('成功删除 /tmp/hello');
    });

    如果是同步方法,任何异常都会被立刻抛出。可以用try/catch来捕捉

    onst fs = require('fs');
    
    try {
     //同步方法,会一直阻塞后面的运行,直到返回
      fs.unlinkSync('/tmp/hello');
      console.log('successfully deleted /tmp/hello');
    } catch (err) {
      // handle the error
    }

    注意,异步的方法不能保证执行顺序,后面的可能会比前面的先完成。 所以下面的例子可能会出错,因为 fs.stat() 操作可能在 fs.rename() 操作之前完成。

    //先改名
    fs.rename('/tmp/hello', '/tmp/world', (err) => {
      if (err) throw err;
      console.log('重命名完成');
    });
    
    //再看后续的状态
    fs.stat('/tmp/world', (err, stats) => {
      if (err) throw err;
      console.log(`文件属性: ${JSON.stringify(stats)}`);
    });

    若想按正确的顺序执行操作,则需要把 fs.stat() 放到 fs.rename() 操作的回调函数中。

    这样只有rename执行完之后,才会执行到stat()

    //改名
    fs.rename('/tmp/hello', '/tmp/world', (err) => {
      if (err) throw err;
    
      //查看状态
      fs.stat('/tmp/world', (err, stats) => {
        if (err) throw err;
        console.log(`文件属性: ${JSON.stringify(stats)}`);
      });
    });

    如果只是一个用户的情况下,同步异步差异不大。

    但是如果多用户,使用同步的方法,一个用户的等待会导致全体用户的等待。

    fs.readFile:异步读文件

    const data = fs.readFileSync:同步读文件

    fs.writeFile:异步写文件

    如果文件没有的话,会自动创建

    const fs = require('fs');
    
    const content = Buffer.from('Hello World');
    
    //目标文件
    //内容 content
    //错误处理
    fs.writeFile('./test',content,err=>{
        console.log(err);
    })

    文件信息stats

    isdir isfile

    stat报错就是文件不存在

    改名rename

    删除unlink

    读目录 readdir

    新建目录mkdir

    删除文件夹rmdir

    监控文件watch

    通过流来读写文件

    和直接读好像没有什么区别,至少现在没发现。

    fs.createReadStream

    fs.createWriteStream

    回调地狱

    //回调地狱
    ()=>{
        ()=>{
            ()=>{
                ()=>{}
            }
        }
    }

    promisify

    async function

  • 相关阅读:
    Programming Windows 第五版读书笔记 第三章 窗口和消息
    一个带游标的遍历数据的函数|数据库操作|软件开发
    递归删除一个文件夹下的所有文件c#代码
    杭州市市民卡办理点
    NTLDR is missing 的解决方法
    SQL Server中 将日期格式化.函数 CONVERT
    1.显示网页中的所有图片
    用sql函数获取中文字符串的全拼
    地柜便利一个文件夹下的所有文件|软件开发
    软件是什么
  • 原文地址:https://www.cnblogs.com/weizhibin1996/p/9289648.html
Copyright © 2011-2022 走看看