美文网首页
node中fs模块详解

node中fs模块详解

作者: 苏s哈 | 来源:发表于2020-03-16 22:49 被阅读0次

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()创建写入文件

  • 如果目录文件已经存在(index.html),将会覆盖原文件的内容
const fs = require('fs')
fs.writeFile('./html/index.html', '你好 node.js', (err) => {
  if(err){
    console.log(err);
    return;   
  }
  console.log('创建写入文件成功');
})

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

  • 如果目录文件已经存在(index.css),将会再原文件末尾追加内容
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()删除目录成功

  • 如果该目录下有文件,便会删除失败;得先采用fs.unlink()删除该文件
  • 删除的目录必须是空目录
const fs = require('fs');
fs.rmdir('./html', (err) => {
  if(err){
    console.log(err);
    return;   
  }
  console.log('删除目录成功');
})

案列模块

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

  • 上述案例或可通过第三方包来实现(mkdirp)
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()文件写入流

  • 要想触发写入流对象的on事件,必须再前触发end事件
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)

相关文章

  • node中fs模块详解

    1、fs.stat()判断是文件还是目录 2、fs.mkdir()创建目录 3、fs.writeFile()创建写...

  • 八:Node文件系统管理

    导入:var fs = require("fs") 定义:Node.js 文件系统(fs 模块)模块中的方法均有异...

  • node.js文件操作

    fs 文件操作用的模块为node.js中的fs模块.因此要提前将其引入. var fs = require('fs...

  • 关于node.js一些模块的记录「FS模块」

    目录 Node.JS教程 FS模块 Path模块 FS模块 Path模块 Node.js path 模块提供了一些...

  • Node进阶 ---- fs

    1. fs模块 在Node.js中,使用fs模块来实现所有有关文件及目录的创建、写入及删除操作。 在fs模块中,所...

  • 核心模块——File System

    Node中对文件的操作需要用到此模块,先引入模块 var fs = require('fs');,模块中的方法都提...

  • 04-文件读写

    fs模块---》操作文件---》io----》node的特长 fs模块是node非常重要的模块,能体现出node的...

  • NodeJS学习1

    Node里的http和fs的模块学习中见到的问题 node的fs模块 读文件的API的回调函数中的参数data返回...

  • 2016,9,13

    ##node.js的学习 #node.js的fs模块 var fs = require('fs'); functi...

  • node中fs模块

    node中的‘fs’模块是文件模块, 检测文件是否存在 注意:path路径前面不需要加'/',

网友评论

      本文标题:node中fs模块详解

      本文链接:https://www.haomeiwen.com/subject/hvmoehtx.html