zoukankan      html  css  js  c++  java
  • nodeJs--02.fs包文件操作

    fs包文件操作

    • 通过node操作系统中的文件。使用文件系统,需要先引入fs模块,fs模块是核心模块,直接引入不需下载。
    • fs模块中所有操作都有两种 形式可供选择同步和异步。同步文件系统会阻塞程序的执行,也就是除非操作完成,否则不会向下执行代码
    • 一步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回。

    1.文件写入

    • 写入操作

      • 同步写入:
      var fs = require("fs")
      
      // 1.打开文件
      var fd = fs.openSync("hello.txt","w")
      // path 打开文件路径
      // flags 打开文件操作类型 w 只读,r 写
      // mode 谁文件操作权限,Linux有文件权限
      // 返回值:返回文件描述符
      
      // 2.文件写入
      fs.writeSync(fd, "hello Tom")
      // fd 文件描述符
      // string 要写入内容
      // position 写入起始为止
      // encoding 写入编码, 默认utf-8
      
      // 3.保存关闭文件
      fs.closeSync(fd)
      
      
      • 异步写入
      var fs = require("fs")
      // 异步方法
      // 异步方法都是通过回调函数调用的
      // 回调函数有2个参数:
      //      err  发生错误
      //      fd   文件描述符
      fs.open("hello2.txt", "w", function (err, fd){
          if (!err) {
              console.log(fd)
              // fs.write 异步写入操作
              fs.write(fd, "异步操作", function (err){
                  if (!err) {
                      console.log("异步写入成功")
                  }
                  // 关闭文件
                  fs.close(fd, function (err) {
                      if (!err) {
                          console.log("文件关闭成功")
                      }
                  })
              })
          } else {
              console.log(err)
          }
      })
      
      console.log("程序向下执行")
      // 程序向下执行
      // 20
      // 异步写入成功
      // 文件关闭成功
      
    • 简单异步写入

      var fs = require("fs")
      // fs.writeFile()
      //     path: 要操作文件路径
      //     data: 要写入的数据
      //     options  选项,可以对吸入进行一些设置
      //     callback 当写入完成以后执行的函数
      fs.writeFile("hello3.txt", 'sample write', function (err){
          if (!err) {
              console.log("写入成功")
          }
      })
      
      
    • 追加写入

      fs.writeFile("hello3.txt", 'sample write
      ', {flag: "a"},function (err){
          if (!err) {
              console.log("写入成功")
          }
      })
      
      
    • 流式文件写入

      • 同步,异步,简单文件的写入都不适合打文件写入,性能差,容易内存溢出
      // 创建一个可写入流
      var fs = require("fs");
      
      
      // fs.createWriteStream(path, [options])
      // path:文件路径
      // options 配置参数
      var ws = fs.createWriteStream("hello4.txt")
      
      // 监听流的打开和关闭
      
      // 监听打开为对象绑定一个一次性事件,触发一次失效
      ws.once("open", function (){
          console.log("流文件打开...")
      })
      ws.once("close", function (){
          console.log("流文件关闭...")
      })
      
      ws.write("流失写入1")
      ws.write("流失写入2")
      ws.write("流失写入3")
      ws.write("流失写入4")
      ws.write("流失写入5")
      ws.write("流失写入6")
      
      // 关闭流 此处不能用close
      ws.end();
      

    2.文件读取

    • 简单文件读取

      // fs.readFile(path[, options], callback)
      // path 要读取文件路径
      // options 读取选项
      // callback 回调函数
      fs = require("fs");
      
      
      fs.readFile("./hello4.txt", (err, data) => {
          // throw 触发异常
          if (err) throw err;
          console.log(data)
      })
      
    • 流失文件读取

      var fs = require("fs")
      // 创建读流
      var rs = fs.createReadStream("hello4.txt")
      // 创建写流
      var ws = fs.createWriteStream("hello5.txt")
      
      // 监听打开为对象绑定一个一次性事件,触发一次失效
      rs.once("open", function (){
          console.log("读流文件打开...")
      })
      rs.once("close", function (){
          console.log("读流文件关闭...")
          // 数据读取完毕,关闭流
          ws.end()
      })
      
      ws.once("open", function (){
          console.log("写流文件打开...")
      })
      ws.once("close", function (){
          console.log("写流文件关闭...")
      })
      
      // 读取数据
      rs.on("data", function (data) {
          console.log(data.length)
          // 将读取数据写入
          ws.write(data)
      })
      
      
    • 上述操作过于麻烦,通过pipe简化操作

      var fs = require("fs")
      // 创建读流
      var rs = fs.createReadStream("hello4.txt")
      // 创建写流
      var ws = fs.createWriteStream("hello6.txt")
      
      // 监听打开为对象绑定一个一次性事件,触发一次失效
      rs.once("open", function (){
          console.log("读流文件打开...")
      })
      rs.once("close", function (){
          console.log("读流文件关闭...")
      })
      
      ws.once("open", function (){
          console.log("写流文件打开...")
      })
      ws.once("close", function (){
          console.log("写流文件关闭...")
      })
      // pipe将读流输出到写流
      rs.pipe(ws);
      
      

    3.其他操作

    • 其他操作

      // 验证路径是否存在
      fs.existsSync(path)
      // 获取文件信息
      fs.stat(path,callback)
      fs.statSync(path)
      // 删除文件
      fs.unlink(path,callback)
      fs.unlinkSync(path)
      // 读取文件目录
      fs.readdir(path[,options],callback)
      fs.readdirSync(path,len)
      // 截断文件
      fs.truncate(path, len callback)
      fs.truncateSync(path, len)
      // 建立目录
      fs.mkdir(path[.mode],callback)
      fs.mkdirSync(path[,mode])
      // 文件重命名
      fs.rename(oldpath,newpath,callback)
      fs.renameSync(oldpath,newpath)
      // 删除目录
      fs.rmdir(path,callback)
      fs.rmdirSync(path)
      // 见识文件更改写入
      fs.watchFile(filename[,options],listener)
      
    • fs.stat

      fs.stat("hello.txt", function(err, stat) {
        // 大小
        console.log(stat.size)
        // 是否是一个文件
        console.log(stat.isFile())
        // 是否是文件夹
        console.log(stas.isDirectory())
      })
      
    • fs.readdir

      fs.readdir(".",function (err, files){
          if (!err) {
              console.log(files)
          }
      })
      // files为一个数据,内容为文件名字符串格式
      
    • fs.truncate

      //将文件截断指定大小
      
      fs.truncate("hello2.txt",10,function (err){
          if (err) {
              throw err
          }
          console.log("截取成功")
      })
      
      
    • fs.watchFile

      fs.watchFile("hello2.txt",function (curr,prev) {
          console.log("文件发生变化")
          // curr 当前文件状态
          // prev 修改前文件状态
          console.log("修改前文件大小",prev.size)
          console.log("修改后文件大小",curr.size)
      })
      // 阻塞状态
      

      在options可以设置监听事件间隔

      fs.watchFile("hello2.txt",{interval: 1000},function (curr,prev) {
          console.log("文件发生变化")
          // curr 当前文件状态
          // prev 修改前文件状态
          console.log("修改前文件大小",prev.size)
          console.log("修改后文件大小",curr.size)
      })
      
      
  • 相关阅读:
    nginx proxy_set_header
    nginx minio
    /etc/nginx/sitesenabled
    IDEA从mapper.java或者dao.java跳转到mapper.xml
    htmlwebpackplugin 配置项
    第29天 [js]时间戳转换
    CSS权重值计算
    nginx+keepalived实现高可用负载均衡 繁华
    kali安装 IDEA2020 破解并创建快捷方式
    下载 android source 之repo获取
  • 原文地址:https://www.cnblogs.com/xujunkai/p/13661752.html
Copyright © 2011-2022 走看看