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

posted @ 2018-07-10 16:06  朋友圈  阅读(138)  评论(0编辑  收藏  举报