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

  • 相关阅读:
    Smart Client Architecture and Design Guide
    Duwamish密码分析篇, Part 3
    庆贺发文100篇
    .Net Distributed Application Design Guide
    New Introduction to ASP.NET 2.0 Web Parts Framework
    SPS toplevel Site Collection Administrators and Owners
    来自Ingo Rammer先生的Email关于《Advanced .Net Remoting》
    The newsletter published by Ingo Rammer
    深度探索.Net Remoting基础架构
    信道、接收器、接收链和信道接受提供程序
  • 原文地址:https://www.cnblogs.com/weizhibin1996/p/9289648.html
Copyright © 2011-2022 走看看