node中fs模块详解

2020-03-16  本文已影响0人  苏s哈

1、fs.stat()判断是文件还是目录

const fs = require('fs')
fs.stat('./html', (err, data) => {
  if(err){
    console.log(err);
    return;
  }
  console.log(`是文件:${data.isFile()}`);
  console.log(`是目录:${data.isDirectory()}`);
})

2、fs.mkdir()创建目录

const fs = require('fs')
fs.mkdir('./css', (err) => {
  if(err){
    console.log(err);
    return;   
  }
  console.log('创建成功');
})

3、fs.writeFile()创建写入文件

const fs = require('fs')
fs.writeFile('./html/index.html', '你好 node.js', (err) => {
  if(err){
    console.log(err);
    return;   
  }
  console.log('创建写入文件成功');
})

4、fs.appendFile()追加写入文件

const fs = require('fs')
fs.appendFile('./css/index.css', 'html{color:red}', (err) => {
  if(err){
    console.log(err);
    return;   
  }
  console.log('追加文件成功');
})

5、fs.readFile()读取文件

const fs = require('fs')
fs.readFile('./css/index.css', (err, data) => {
  if(err){
    console.log(err);
    return;   
  }
  console.log(data); // 二进制
  console.log(data.toString()); // 将 Buffer 转化为 string 类型
  
})

6、fs.readdir()读取目录

const fs = require('fs')
fs.readdir('./html', (err, data) => {
  if(err){
    console.log(err);
    return;   
  }
  console.log(data);
})

7、fs.rename()

const fs = require('fs');
fs.rename('./html/index.html', './html/base.html', (err) => {
  if(err){
    console.log(err);
    return;   
  }
  console.log('重命名成功');
})
const fs = require('fs');
fs.rename('./html/index.html', './css/index.html', (err) => {
  if(err){
    console.log(err);
    return;   
  }
  console.log('移动文件成功');
})

8、fs.unlink()删除文件

const fs = require('fs');
fs.unlink('./html/base.html', (err) => {
  if(err){
    console.log(err);
    return;   
  }
  console.log('删除文件成功');
})

9、fs.rmdir()删除目录成功

const fs = require('fs');
fs.rmdir('./html', (err) => {
  if(err){
    console.log(err);
    return;   
  }
  console.log('删除目录成功');
})

案列模块

1、 判断服务器上面有没有 upload 目录,没有的话创建目录,有就不做操作

const fs = require('fs')
const path = './upload'

fs.stat(path, (err, data) => {
  if(err){
    mkdir(path);
    return;
  }
  if(!data.isDirectory()){
    // 首先删除文件,再去执行创建目录
    fs.unlink(path, (err)=> {
      if(!err){
       mkdir(path)
      }
      console.log('请检测传入的数据是否正确');
    })
  }
})

function mkdir(dir){
  fs.mkdir(dir, (err) => {
    if(err){
      console.log(err);
      return;
    }
  })
}

2、找出wwwroot目录下所有的目录,并存储到数组中

const fs = require('fs');
// 1、封装一个isDir方法来判断资源是目录还是文件
async function isDir(path){
  return new Promise((resolve, reject) => {
    fs.stat(path, (err, status) => {
      if(err){
        console.log(err);
        reject(err);
        return;
      }
      if(status.isDirectory()){
          resolve(true);
      }else{
        resolve(false);
      }
    })
  })
}
// 2、获取根目录(wwwroot)的所有资源,并循环遍历判断目录
function main(){
  let dirArr = [];
  const 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);
  })
}
// 3、调用方法,获取目录数组
main();

10、fs.createReadStream()文件读取流

const fs = require('fs')
let readStream = fs.createReadStream('./data/input.txt')
let count = 0
let str = ''
readStream.on('data', (data) => {
  str += data
  count++
})
readStream.on('end', () => {
  console.log(str)
  console.log(count)
})
readStream.on('err', (err) => {
  console.log(err)
})

11、fs.creatWriteStream()文件写入流

const fs = require('fs')
let str = ''

for(let i = 0; i < 500; i++){
  str += '我是数据,我要保存起来\n'
}

let writeStream = fs.createWriteStream('./data/output.txt')
writeStream.write(str)
// 标记文件末尾
writeStream.end()
writeStream.on('finish', () => {
  console.log('写入完成')
})

12、管道流(针对大文件复制、图片复制等等)

const fs = require('fs')

let readStream = fs.createReadStream('./s.jpg')

let writeStream = fs.createWriteStream('./data/sjb.jpg')

readStream.pipe(writeStream)
上一篇 下一篇

猜你喜欢

热点阅读