node.js fs模块练习

在这里插入图片描述

//判断服务器上面有没有upload目录,如果没有创建这个目录,有就不做操作
let fs  =require('fs');
let path = './upload';
fs.stat(path,(err,data)=>{
  if(err){
    //执行创建目录
    mkdir(path);
    return;
  }
  if(!data.isDirectory()){//如果是文件
    fs.unlink(path,()=>{//删除方法
      if(!err){
        mkdir(path);
      }else{
        console.log('创建失败')
      }
    })
  }
})
 //创建目录的方法
 function mkdir(dir){
   fs.mkdir(dir,err=>{
    console.log(err);
    return;
   });
 }

/*cnpm i mkdirp --save
引入 let mkdir = require(‘nkdirp’);
*/
现在文档已经更新了,有新的方法mkdirp自行查看

let mkdirp = require('mkdirp');//效果跟上面的创建目录是一样的
mkdirp('./upload/abc/xxx');

2.wwwroot 文件夹下面有images css js 以及index.html ,找出wwwroot目录下面的所有目录,然后放到一个数组中

const fs = require('fs');
let  dirArr = [];
let path = './wwwroot';
//错误的写法要注意fs里面的东西是异步
fs.readdir(path,(err,data)=>{
  if(err){
    console.log(err)
  }
  for(let i = 0;i<data.length;i++){
      fs.stat(path+'/'+data[i],(err,stats)=>{
          if(stats.isDirectory()){
            dirArr.push(data[i]);
          }
      })
  }
  console.log(dirArr);
})
console.log(dirArr);

1.递归实现

const fs = require('fs');
let dirArr = [];
let path = './wwwroot';
  (function getDir(i) {
    if(i==data.length){//判断退出的条件
      console.log(dirArr);
      return;
    }
    fs.stat(path + '/' + data[i], (err, stats) => {
      if (stats.isDirectory()) {
        dirArr.push(data[i]);
      }
      getDir(i + 1);
    })
  
  })(0)//从0开始执行
})

2.nodejss 里面的新特新 async await

/* Promise 处理异步 resolve成功的回调函数 reject 失败的回调函数*/
let getData = (res,rej)=>{
  setTimeout(()=>{
    let name = 'zqw';
    res(name);
  },1000);
}

let p = new Promise(getData);
p.then((data)=>{
  console.log(data);
})
const fs = require('fs');

//1.定义一个isDir 的方法判断一个资源到底是目录还是文件
async function isDir(path) {
  return new Promise((res, rej) => {
    fs.stat(path, (err, stats) => {
      if (err) {
        console.log(err);
        rej(err);
        return;
      }
      if (stats.isDirectory()) {
        res(true);
      } else {
        res(false);
      }
    })
  })
}

//2.获取wwwwroot里面的所有资源  循环遍历   function main() {
  function main(){
    let dirArr = [];
  let path = './wwwroot';
   fs.readdir(path,async (err, data) => {
    if (err) {
      console.log(err);
      return;
    }
    for (let i = 0; i < data.length; i++) {
        if(await isDir(path+'/'+data[i])){
          dirArr.push(data[i]);
        }
    };
    console.log(dirArr)
  })
  }
  main()

fs中的流以及管道流 复制图片 复制文件

//以流的方式读取文件
const fs = require('fs');
let readstream = fs.createReadStream('./wwwroot/input.txt');
let count = 0;
let str = '';
readstream.on('data',(data)=>{
  str+=data;
  count++;
})
readstream.on('end',()=>{
  console.log(str);
  console.log(count)
});
let fs =require('fs');//以流的方式写入文件
var str = '';
for(var i=0;i<500;i++){
  str+='xisdfff\n'
}

let writeStream = fs.createWriteStream('./wwwroot/input.txt')
writeStream.write(str);
writeStream.end();
writeStream.on('finish',()=>{
  console.log('写入完成')
})

const fs =require('fs');
let readStream = fs.createReadStream('aaa.jpg')
let writeStream = fs.createWriteStream('./wwwroot/aaa.jpg');
readStream.pipe(writeStream);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值