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

  • 相关阅读:
    条理清晰的搭建SSH环境之整合Hibernate和Spring
    条理清晰的搭建SSH环境之整合Struts和Spring
    条理清晰的搭建SSH环境之添加所需jar包
    日志工具的使用
    ajax上传文件
    input标签添加上disable属性在移动端字体颜色不兼容的解决办法。
    复制复制复制复制复制复制复制
    animate旋转动画练习,css3形变练习
    canvas练习单个矩形形变
    canvas刮刮卡
  • 原文地址:https://www.cnblogs.com/weizhibin1996/p/9289648.html
Copyright © 2011-2022 走看看