node.js---fs文件系统

一、文件系统的读取

  1. 单文件异步读取
1.请求加载fs模块
let fs=require("fs");
2.暴露一个对象,在需要的模块中引入
redfile(){
     //readFile("文件名",option(文件读取方式),回调函数((error,data)=>{}))
        fs.readFile("./page/data.txt",(error,data)=>{
            if(error){
                throw error;
            }
            //若设置了readFile()中的option参数为“utf-8”,data直接输出为data.txt的内容
            console.log(data);  //输出一组buffer值  字节数组
            console.log(data.toString());  //输出文件data.txt的内容
        })
    }
3.在需要的模块引入
let fs = require("./comment/fsRead");   //require("文件模块的文件路径")
fs.redfile();   //调用暴露对象中的方法
  1. 单文件同步读取
1.请求加载fs模块
let fs=require("fs");
2.暴露一个对象,在需要的模块引入
module.exports={
  readfileSync(){
      //fs.readFileSync("要读取文件的路径")  没有回调函数
        let info=fs.readFileSync("./page/data.txt").toString();
        console.log(info);
  }
}
3.在需要的模块引用
let fs = require("./comment/fsRead");   //require("文件模块的文件路径")
fs.readfileSync();    //调用定义的同步读取的方法
  1. 使用了文件描述符来读取文件
fs.read(fd, buffer, offset, length, position, callback)  参数说明:
buffer - 数据写入的缓冲区。
offset - 缓冲区写入的写入偏移量。
length - 要从文件中读取的字节数。
position - 文件读取的起始位置
callback-有三个参数(err,bytesRead,buffer) bytesRead 表示读取的字节数,buffer 为缓冲区对象。
1.建立一个缓冲区
let buffer = new Buffer(32);  //Buffer(要读取的字节数)

2.打开文件
fs.open("page/write.txt","r+",(error,fd)=>{
    if(error){
       console.log("文件打开失败");
    }else{
    3.读取文件
    fs.read(fd,buffer,0,buffer.length,0,(error,bytes,buffer)=>{
       console.log(bytes,buffer);   //32  buffer   一个字三个字节
       if(error){
         console.log("读取失败");
       }else{
         console.log(buffer.slice(0,bytes).toString());
       }
    })
  }
})
  1. 读取文件信息,判断是目录还是文件
 fs.stat("文件路径",callbcak);
 回调函数,有两个参数:(error, stats), stats 是 fs.Stats 对象
 stats.isFile()   判断是否为文件
 stats.isDirectory()  判断是否为文件夹
   fs.stat("./comment", (error,stats)=>{
        if(error){
            console.log(error);
        }
        console.log(stats.isFile());     
        console.log(stats.isDirectory());  
    })
  1. 读取文件夹
 fs.readdir("文件路径",callback)
 回调函数,有两个参数:(error, files) files为文件夹下的所有子集文件
 fs.readdir("./comment",(error,files)=>{
     if(error){
        console.log(error);
     }
     console.log(files);
})

实例:用node读取一个文件夹下的所有文件

readAllFile(){
  let beginurl="comment";
  readFile(beginurl);
  function readFile(url){
      fs.readdir(url,(error,files)=>{
       if(error){
          throw error;
       }
      //遍历所有子集文件
      files.forEach((file,index)=>{
        //判断子集文件是文件还是目录
        fs.stat(url+"/"+file,(error,stats)=>{
         if(stats.isDirectory()){
         //console.log(file+"是文件夹");
         //如果当前是文件夹,再读取文件夹,遍历所有子集文件,知道输出所有单文件
            readFile(url+"/"+file);  
         }else{
             console.log(file+"是文件");
         }
       })
     })
    })
  }
 }

二、文件的打开与关闭

fs.open(path, flags[, mode], callback)
path  文件路径; flags 文件打开的行为(r 只读 r+可读可写)
mode 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)
callback 参数(error,fd)

fs.close(fd, callback)  fd 为打开文件回调函数传递的参数fd
callback 参数(error)
 fs.open("comment/server.js", 'r+', function(err, fd) {
      if (err) {
         console.log(err);
         return;
     }
     console.log("文件打开成功!");
    // 关闭文件
    fs.close(fd, function(err){
     if (err){
        console.log(err);
     } 
     console.log("文件关闭成功");
   });
});

三、目录的创建与移除

fs.mkdir(path[, options], callback)
callback 参数 (error)

fs.rmdir(path, callback)
callback 参数 (error)
 fs.mkdir("comment/user",(error)=>{
    if(error){
       console.log("文件已存在");
       //移除目录
       fs.rmdir("comment/user",(error)=>{
            if(error){
              console.log("文件移除失败");
            }else{
               console.log("文件移除成功");
           }
        })
    }else{
       console.log("创建成功");
    }
})

四、文件的写入

  1. 覆盖式写入
覆盖式写入 每次写入的内容会覆盖前一次写入的内容
fs.writeFile(file, data, callback)
data为写入的数据
 fs.writeFile("page/write.txt",data+"\n",(err)=>{
      if(err){
         console.log(err);
     }else{
         console.log("写入成功")
     }
 })

2.追加式写入

追加式写入 每次写入的内容会追加到之前写入的内容之后
fs.appendFile(file, data, callback)  用法与writeFile()相同
data为写入的数据

五、单文件的删除

fs.unlink(path,callback)
fs.unlink("comment/router/routerinfo.js",(error)=>{
      if(error){
          console.log(error);
      }else{
          console.log("删除成功");
      }
  })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值