• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

node-fs

武飞扬头像
前端新手W
帮助1

一. 文件写入

(1) 写入文件场景

  • 下载文件

  • 安装软件

  • 保存程序日志

  • 编辑器保存文件

  • 视频录制

(2)异步写入-writeFile

//1.fs.writeFile(file,data[,options], callback)
/**
 * 参数说明:
 * 1. file文件名
 * 2. data待写入的数据
 * 3. options选项设置(可选)
 * 4. callback写入回调
 */
function fun1(){
  fs.writeFile('./写入的文本.txt','写入的文字',err=>{
    if(err){
      console.log(err)
      return
    }
    console.log('写入成功')
  })
}

学新通

(3)同步写入-writeFileSync

参数与fs.writeFile大体一致, 只是没有callback参数

(4)追加写入-appendFile/appendFileSync/writeFile

  1. fs.appendFile(file,data[,options],callback)
fs.appendFile('./写入的文本.txt','\n追加的文本',err=>{

  if(err) return 

  console.log('追加成功')
}
  1. 使用writeFile

    function fun3(){
      fs.writeFile('./写入的文本.txt','追加的文本',{flag:'a'},err=>{
        if(err) return
        console.log('writeFile追加成功')
      })
    }
    

(5)流式写入-createWriteStream

fs.createWriteStream(path[,options])

  • 流式写入可以减少打开关闭文件的次数

  • 流式写入适用于大文件写入或者频繁写入的场景,writeFile适用于写入频繁较低的场景

  let ws = fs.createWriteStream('./流式写入.txt')
  ws.write('1\n')
  ws.write('2\n')
  ws.write('3\n')
  ws.write('4\n')

  ws.end()

二.文件读取

(1) 文件读取应用场景

  • 电脑开机
  • 程序运行
  • 编辑器打开文件
  • 查看图片
  • 播放视频
  • 播放音乐
  • Git查看日志
  • 上传文件
  • 查看聊天记录

(2) 异步读取-readFile

//fs.readFile(path[,options],callback)
let path = './写入的文本.txt'
fs.readFile(path,(err,data) => {
    if(err) throw err
    console.log(data.toString())
})

(3) 同步读取-readFileSync

//fs.readFileSync(path[,options])
let path = './写入的文本.txt'
let data = fs.readFileSync(path)
console.log(data.toString())

(4) 流式读取-createReadStream

fs.createReadStream(path[, options])
let rs = fs.createReadStream('./写入的文本1.txt')
//每次取出64KB数据后再执行一次data回调
rs.on('data', data=>{
    console.log(data.toString());
    console.log(data.length)
})
//读取完成后, 执行end回调
rs.on('end', ()=>{
    console.log('读取完成')
})

(5)复制文件练习

const fs = require('fs')
const process = require('process')
/**
 * 复制测试.mp4到fs文件夹下
 * 1. readFile: 异步读取
 * 2. createReadStream: 流式读取
 */



// 1.readFile-writeFile
let readPath = '../测试.mp4'
let writePath = './测试(1).mp4'
let writePath2 = './测试(2).mp4'
function fun1(){
  // 读取
  fs.readFile(readPath,(err,data)=>{
    console.log('读取成功')
    // console.log(data)
    // 写入
    fs.writeFile(writePath,data,err=>{
      if(err) throw err
      console.log('写入成功')
    })
  })
}

// fun1()

//2. createReadStream-createWriteStream
function fun2(){
  let rs = fs.createReadStream(readPath)
  let ws = fs.createWriteStream(writePath2)

  //2.1
  rs.on('data', data=>{
    // console.log(data.length)
    ws.write(data)
    // ws.end() //不能加这个,加了出错
  })
  rs.on('end',()=>{
    console.log('读取完成')
  })
  //2.2
  // 管道流:rs.pipe(ws)
}
// fun2()

/**
 * process: 获取代码运行占量
 */

// fun1() //rss 20701184字节 19MB
fun2() //rss 20635648
console.log(process.memoryUsage())
学新通

三.文件移动和重命名-rename

在node中, 可以用rename和renameSync来移动或重命名文件或文件夹

fs.rename(oldPath, newPath, callBack)

  • oldPath 文件当前路径
  • newPath: 文件新的路径
  • callBack: 操作后的回调
const fs = require('fs')
// 1.fs.rename 同步修改名字和文件移动
// 2.fs.renameSync 异步修改名字和文件移动

//1.fs.name(oldPath, newPath, callback)
let oldPath = "./流式写入.txt"
let newPath = "./流式写入1.txt"
fs.rename(oldPath,newPath,err=>{
  if(err) throw err
  console.log('修改')
})

四.文件删除

在node中可以使用unlink或unlinkSync来删除文件

fs.unlink(path, callback)

const fs = require('fs')
/**
 * 1.unlink unlinkSync
 * 2.rm rmSync
 */

//1.fs.unlink(path,callback)
// fs.unlink('./测试1',err=>{
//   if(err) throw err
// })

//2.fs.rm(path,callback)
fs.rm('./测试2',err=>{
  if(err) throw err
})  

五.文件夹操作

(1)创建文件夹-mkdir

fs.mkdir(path[, options],callback)

  1. 异步创建文件夹
fs.mkdir('./page', err => {
    if (err) {
      throw err
    } else {
      console.log('创建成功')
    }
  })
  1. 异步创建递归文件夹
  fs.mkdir('./a/b/c',{recursive: true}, err => {
    if (err) {
      throw err
    }
      console.log('创建成功')
  })

(2) 读取文件夹-readdir

fs.readdir(path[, options],callback)

fs.readdir('./', (err,data) => {
    if (err) {
      throw err
    } else {
      console.log(data)
    }
  })

(3)删除文件夹-rmdir

  1. fs.rmdir(path[,options],callback

    /**
     * 只能删除空文件夹
     */
    fs.rmdir('./a', err => {
        if (err) {
            throw err
        } else {
            console.log('删除成功')
        }
    })
    
  2. 深度删除

    fs.rmdir('./a',{recursive: true}, err => {
        if (err) {
          throw err
        } else {
          console.log('删除成功')
        }
      })
    

六.查看资源状态-stat

  • 异步: fs.stat(path[, options], callback)
  • 同步: fs.statSync(path[,options])
const fs  = require('fs')
fs.stat('./测试(2).mp4',(err,data)=>{
  if(err) throw err
  console.log(data)
  console.log(data.isFile())//检测是否为文件
  console.log(data.isDirectory()) //检测是否为文件夹
})
/**
  Stats {
  dev: 286136082,
  mode: 33206,
  nlink: 1,
  uid: 0,
  gid: 0,
  rdev: 0,
  blksize: 4096,
  ino: 1688849860562346,
  size: 15423418, //文件体积
  blocks: 30128,
  atimeMs: 1678959494454.5403,
  mtimeMs: 1678959494454.5403,
  ctimeMs: 1678959494454.5403,
  birthtimeMs: 1678959448707.1306, //创建时间
  atime: 2023-03-16T09:38:14.455Z,
  mtime: 2023-03-16T09:38:14.455Z, //最后修改时间
  ctime: 2023-03-16T09:38:14.455Z,
  birthtime: 2023-03-16T09:37:28.707Z
}
 */
学新通

七.__dirname__filename

  1. __dirname保存着当前文件所在目录的绝对路径, 可以使用__dirname与文件名拼接成绝对路径
  2. __filename表示当前正在执行的脚本的文件名. 它将输出文件所在位置的绝对路径
console.log(__dirname) //C:\Users\wang9\Desktop
console.log(__filename) //C:\Users\wang9\Desktop\file.js

八.path

  • path.resolve: 拼接规范的绝对路径
  • path:sep: 获取操作系统的路径分隔符
  • path.parse: 解析路径并返回对象
  • path.basename:获取路径的基础名称
  • path.dirname:获取路径的目录名
  • path.extname:获取路径的扩展名

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggafbf
系列文章
更多 icon
同类精品
更多 icon
继续加载